最近做一个计划任务老出毛病,脚本手动执行一切正常,在crontab里面就不能正常执行,检查问题的时候始终不得方向,之后查看邮件才让我发现是crontab的环境变量设置问题。现在知道要怎么修改了,哈哈,拿出来与大家分享,这个小问题还是比较值得留意一下的。

Crontab执行时不会读取用户的环境变量,所以有时在crontab中添加了脚本任务后经常会发现执行失败,比如说执行ifconfig找不到这个命令之类的。大多数情况下是可能由于环境变量设置问题,如果有其他具体情况可以看root的mail里面邮件。因此,在编写脚本时要声明环境变量,防止发生此类错误。

在脚本开头第一行#!/bin/bash和脚本注释下添加两行内容,如下:

#!/bin/bash
#这里放注释
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
#下面就是脚本的主要内容,可以声明变量可以写函数之类的

注意要在所有其他非注释内容之前,这样做之后脚本在crontab中就能正常执行了。

网上还有说法说用source ~/.bash_profile,我尝试之后没成功,不知道是我添加的地方错了还是咋的。

另外在给crontab添加任务时不要忘了尽量让信息返回,才能更早发现问题更快解决问题。

crontab的前面5个字段的意思分别是:

分钟 (0-59)

小时 (0-23)

日期 (1-31)

月份 (1-12)

星期 (0-6)//0代表星期天

除了数字还有几个个特殊的符号就是"*"、"/"和"-"、",",*代表所有的取值范围内的数字,"/"代表每的意思,"*/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字,比如下面几个例子:

在12:00和13:00分别执行一次某命令,格式如下:

00 12,13 * * * command

每两个小时执行一次命令

0 */2 * * * command

晚上11点到早上8点之间每两个小时,早上八点

0 23-7/2,8 * * * command

每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

0 11 4 * 1-3 command

1月1日早上4点

0 4 1 1 * command

命令之后可以将命令的信息重定向。Linux中重定向规则如下(不仅仅可用于crontab):

command > filename 把标准输出重定向到一个新文件中
command >> filename 把标准输出重定向到一个文件中(追加)
command 1 > fielname 把标准输出重定向到一个文件中
command > filename 2>&1 把标准输出和标准错误一起重定向到一个文件中
command 2 > filename 把标准错误重定向到一个文件中
command 2 >> filename 把标准输出重定向到一个文件中(追加)
command >> filename 2>&1 把标准输出和标准错误一起重定向到一个文件中(追加)
command < filename >filename2 把command命令以filename文件作为标准输入,以filename2文件作为标准输出
command < filename 把command命令以filename文件作为标准输入
command << delimiter 把从标准输入中读入,直至遇到delimiter分界符
command <&m 把文件描述符m作为标准输入
command >&m 把标准输出重定向到文件描述符m中
command <&- 把关闭标准输入
command 2>&1 把command命令标准错误重定向到标准输出