最近做一个计划任务老出毛病,脚本手动执行一切正常,在crontab里面就不能正常执行,检查问题的时候始终不得方向,之后查看邮件才让我发现是crontab的环境变量设置问题。现在知道要怎么修改了,哈哈,拿出来与大家分享,这个小问题还是比较值得留意一下的。
Crontab执行时不会读取用户的环境变量,所以有时在crontab中添加了脚本任务后经常会发现执行失败,比如说执行ifconfig找不到这个命令之类的。大多数情况下是可能由于环境变量设置问题,如果有其他具体情况可以看root的mail里面邮件。因此,在编写脚本时要声明环境变量,防止发生此类错误。
在脚本开头第一行#!/bin/bash和脚本注释下添加两行内容,如下:
1
2
3
4
5
|
#!/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分别执行一次某命令,格式如下:
每两个小时执行一次命令
晚上11点到早上8点之间每两个小时,早上八点
1
|
0 23-7
/2
,8 * * *
command
|
每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
1月1日早上4点
命令之后可以将命令的信息重定向。Linux中重定向规则如下(不仅仅可用于crontab):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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
命令标准错误重定向到标准输出
|