很多人在使用 crontab 做计划任务的时候,明明发现程序或脚本在单独运行时是可行的,但放到 crontab 里却不能定时执行了,即使再三检查 crontab 的书写语法都没发现问题。
现在假设配置 crontab 用的是 root 用户,那么将下面的脚本放在 /home/51cto 这个目录下,并做好 crontab ,希望它在每天的 11:11 分被执行。
脚本代码(tmp.sh):
[Bash shell] 纯文本查看 复制代码 #!/bin/sh
cat user.txt | while read line
do
echo -n "All OK" `date` > /home/51cto/result.txt
done
crontab 内容编辑如下:
[Plain Text] 纯文本查看 复制代码 11 11 * * * sh /home/51cto/tmp.sh
你觉得这个脚本会执行成功吗?答案是否定的,那么问题出在哪里了?
一个容易让人忽略的细节就是配置 crontab 的用户的 home 路径。比如在 root 用户配置 crontab 里,脚本被自动运行时,脚本里需要用到的文件或生成的文件都是在 /root 这个目录下,其它用户则在自己的家目录下。那么这时注意到上面脚本中的 cat user.txt 这条语句,cat 命令会到 /root 里去寻找 user.txt ,那这自然是找不到的,因此脚本最后也不可能生成 result.txt 这个文件。
一个解决的办法是,要将 user.txt 这个文件添加上全路径,如 /home/51cto/user.txt ,否则就会出错。
从这个细节扩展来看,在使用 crontab 时,需要注意的一个问题是文件的“全路径”,这个细节最容易导致程序或脚本执行不成功。 |