曲径通幽论坛

标题: 令人容易忽略的细节:为什么有些情况系crontab不能执行 [打印本页]

作者: beyes    时间: 2012-7-14 11:33
标题: 令人容易忽略的细节:为什么有些情况系crontab不能执行
很多人在使用 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 时,需要注意的一个问题是文件的“全路径”,这个细节最容易导致程序或脚本执行不成功。




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2