Linux Crontab 中自动执行后没有生效

lb563 · 2013年05月05日 · 最后由 lb563 回复于 2013年05月05日 · 11004 次阅读

使用 crontab 添加一个定时任务

  • * * * * /bin/bash -l -c ' ~/.script.sh'

这个脚本的作用是统计一些数据并生成报表文件。

这个脚本每分钟执行一次,但是实际操作中 crontab 并没有像预期的那样生成报表文件。

然而当我手动执行这个命令时 "~/.script.sh" 生成文件并退出。

有两个疑问:

1: 为什么 crontab 没有执行我的脚本. 查看了 crontab 日志 (/var/log/crond) 输出: May 5 20:36:01 localhost CROND[27260]: (ernest) CMD (/bin/bash -l -c '~/script.sh') 没有发现任何异常。

2: 会不会是我执行脚本的环境 不一样呢? 测试了一下 "* * * * * /bin/bash -l -c 'source ~/.bash_profile && ~/.script.sh'" 也不行。

各位大牛们有没有遇到和我一样的问题呢?

cd ~/.script.sh 这个真的是执行脚本命令吗?

#1 楼 @Rei 哎哟。写错了。

crontab 安装的用户是脚本所在的 ~ 目录的那个用户吗?

在 script.sh 加上 set -e,有错误立即退出能帮助你测试。还可以在 script.sh 加些调试语句,比如

echo "debug" >> /tmp/script.debug.txt

另外就是把全部的输出,包括 sh 执行语句的 log 全部都重定向到一个文件中去:

# 加在文件开头的地方
exec >> /tmp/script.debug.txt 2>&1
set -e
set -x

...

貌似要写绝对路径~~~

#1 楼 @Rei #3 楼 @doitian #4 楼 @small_fish__ 最后发现问题是 crontab 的 shell 环境和直接在终端上执行脚本的环境不一致. 处理方法是在 ~/.bash_profile 中加入我脚本需要的一环境就可以运行了。多谢

huacnlee Clockwork - 代替 Cron 的计划任务工具 提及了此话题。 04月03日 10:57
需要 登录 后方可回复, 如果你还没有账号请 注册新账号