crontab 提示 command not found 解决方案

今天遇见一个问题,crontab的定时任务会报错:java command not found,但是手动执行脚本一直能成功。

猜想是环境变量的问题。

在crontab里添加个打印环境变量的任务:

* * * * * echo $PATH

查看crontab日志 /var/log/cron

可以看到,path里只有 /usr/bin和/bin两个目录。

怪不得找不到java。

解决方案:

在shell脚本里加一行

source /etc/profile。

另转一篇相关文章:http://xiachaofeng.iteye.com/blog/1405184

1.crontab与环境变量

不要假定cron知道所需要的特殊环境,它其实并不知道。所以你要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。所以注意如下3点:

1)脚本中涉及文件路径时写全局路径;

2)脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如:
cat start_cbp.sh
#!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &
3)当手动执行脚本OK,但是crontab死活不执行时。这时必须大胆怀疑是环境变量惹的祸,并可以尝试在crontab中直接引入环境变量解决问题。如:
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh

2.其他应该注意的问题

1)新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。
2)每条 JOB 执行完毕之后,系统会自动将输出发送邮件给当前系统用户。日积月累,非常的多,甚至会撑爆整个系统。所以每条 JOB 命令后面进行重定向处理是非常必要的: >/dev/null 2>&1 。前提是对 Job 中的命令需要正常输出已经作了一定的处理, 比如追加到某个特定日志文件。
3)当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。
4)千万别乱运行crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。
5)在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+\%Y\%m\%d’`。

3.rontab中的输出配置

crontab中经常配置运行脚本输出为:>/dev/null 2>&1,来避免crontab运行中有内容输出。

shell命令的结果可以通过‘> ’的形式来定义输出

/dev/null 代表空设备文件  

> 代表重定向到哪里,例如:echo "123" > /home/123.txt 

1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"

2 表示stderr标准错误

  & 表示等同于的意思,2>&1,表示2的输出重定向等同于1 

那么重定向输出语句的含义:

1>/dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,不显示任何信息。

2>&1 表示标准错误输出重定向等同于标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

时间: 2024-12-16 19:29:26

crontab 提示 command not found 解决方案的相关文章

ubuntu-18.04.2 查看IP提示 Command 'ifconfig' not found 解决方案

在ubuntu-18.04.2 终端输入ifconfig 如下提示: 我们可以根据提示得知是没有ifconfig 这个命令 下载net-tools 在终端输入:sudo apt-get install net-tools 安装完成后,再输入ifconfig就可以查看IP地址了 ubuntu-18.04.2 查看IP提示 Command 'ifconfig' not found 解决方案 原文地址:https://www.cnblogs.com/wenyi/p/10807366.html

安装SQL Servre2000时提示“command line option syntax error! type command /? for help”

问题: 当程序正在安装ms数据访问组件时,弹出错误提示框:command line option syntax error,type command/? for help,点击确定继续:到了程序正在安装HTML帮助时,弹出标题为html help 1.32 update错误提示框:command line option syntax error,type command/? for help,点击确定继续:程序开始复制文件,复制完后弹出错误提示框:无法找到动态连接库sqlunirl.dll(sq

node.js 安装express 提示 command is not found

在安装express时增加generator参数: npm install -g express-generator 为什么要加上generator呢? 原先的express带cli, 现在把cli拆成了单独的express-generator包. 原先的express运行生成的项目是node app.js, 因为httpserver相关代码都在app.js里, 现在这部分代码移到了项目目录的bin/www下面, app.js只保留实现app的逻辑代码, 你需要去运行那个bin/www. 只是很

linux file命令使用提示command not found

问题:linux下,使用file命令发现提示command not found 解决:需要安装,执行命令:yum -y install file 安装后再次查看,file命令就可以使用了 注意:当执行的时候需要切换到root权限,否则会有如下提示

IIS部署SSL证书后提示不可信的解决方案

IIS部署SSL证书后提示不可信的解决方案 本帖最后由 wosign-support3 于 2015-7-17 17:18 编辑 第一步:打开mmc——点击文件——添加删除管理单元——证书——计算机帐户 第二步:在计算机帐户的个人证书里面导入pfx格式的证书,导入时选择将证书全部导入到个人<ignore_js_op> 里面,然后在个人里面可以看到下面三个证书 第三步:将中级根和交叉根直接拖到到中级证书颁发机构里面 第四步:找到受信任的根证书颁发机构,把顶级根拖到不受信任里面(防止恢复) 4.j

win7访问局域网总提示用户名密码错误解决方案

win7访问局域网总提示用户名密码错误解决方案 1.点击开始-在搜索栏输入:secpol.msc(或者直接按下win+r键,输入secpol.msc),打开本地安全策略. 2.找到“安全设置”的“本地策略”的“安全选项” 3.在右边一栏找到“网络安全:LAN管理器身份验证级别”,双击进入 4.在默认状态选项下,英文版应该为"no defined",中文版为空.下拉那个默认选项,选择“仅发送NTLM响应” 5.确认

财付通退款失败,提示内部错误的解决方案

hp.ClientCertificates.Add(new X509Certificate2(this.certFile, this.certPasswd)); 许多朋友用财付通接口退款会提示失败(Ctrl+F搜 X509Certificate2 ),腾讯官方也并没有解释和文档,其实这是他们疏忽的一个问题. web开发者很少去接触x509这种东西,你不给个文档让大家怎么做呢?而且还经常给一些错误的文档,真的是让人头疼. 下面提供一个解决方案: hp.ClientCertificates.Add(

SQL2012 提示评估已过期 解决方案- sql server问题

SQL2012 提示评估已过期 解决方案提示评估已过期的解决方法和 sql2008一样 第1步:进入SQL2012配置工具中的安装中心第2步:再进入维护界面,选择版本升级第3步:进入产品密钥,输入密钥第4步:一直点下一步,直到升级完毕. 密钥MICROSOFT SQL SERVER 2012 DEVELOPER 版(开发版)序列号:YQWTX-G8T4R-QW4XX-BVH62-GP68YMICROSOFT SQL SERVER 2012 ENTERPRISE SERVER/CAL EDITIO

【已解决】【Mac】 运行adb提示command not found,需要配置adb环境

问题:运行adb提示command not found  解决措施: 1.下载安装:android-sdk-macosx 下载路径:http://down.tech.sina.com.cn/page/45703.html,下载的版本为Mac 24.4.1 2.打开terminal终端 3.创建.bash_profile文件,输入命令:touch .bash_profile .若已经创建过,则无需再次创建.直接跳过此步骤执行4 4.打开.bash_profile文件,命令行输入open -e .b