曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3693|回复: 1
打印 上一主题 下一主题

令人容易忽略的细节:为什么有些情况系crontab不能执行

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2012-7-14 11:33:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很多人在使用 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 时,需要注意的一个问题是文件的“全路径”,这个细节最容易导致程序或脚本执行不成功。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-19 17:25 , Processed in 0.068130 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表