Linux 为什么 centos 中的 crontable 不能运行我的 ruby 脚本 呢?

lb563 · 2012年02月27日 · 最后由 lrbnew 回复于 2013年06月08日 · 4420 次阅读

今天在测试机上测试了一下: 1:crontab -e 2: 47 16 * * * ruby /opt/tools/mysqlbackup.rb 3: sudo service crond reload 4: sudo cat /var/log/cron 5:发现"Feb 27 16:47:01 test01 crond[3140]: (test) CMD (ruby /opt/tools/mysqlbackup.rb)" 这样就告诉服务器我在每天的 16 时 47 分执行这个 ruby 脚本 而这个命令会在/opt/backup/中生成相对应的备份 sql 文件 结果并不是我想的那样,ruby 脚本没有问题在本机测试过 日志也说执行了,但是就没有看到结果。这个是为什么 呢?

ruby 调用的位置不对,在 cron 里面最好写上完整的 ruby 路径,另外还要注意 权限 的问题

crontab 中是没有 env 的。你可以在命令行中将 env 导出来,然后统一写到一个脚本中。 在 crontab 中这样写 47 16 * * * /usr/bin/bash backup.sh

是的。加上全路径后便可达到想要的结果,

不光是全路径的问题,这个问题与 ruby 无关,关键是 crontab 执行的时候并不是你想象中的环境,这涉及到所有的环境变量,建议在 crontab 执行脚本前先 source 必要的 profile,详细情况可以 google 一下 profile bash crontab 等关键词

crontab 的环境和普通用户不同。

很明显,你写的是 ruby /opt/tools/mysqlbackup.rb,但是 crontab 不知道 ruby 在哪里,最简单的解决办法就是给 ruby 前面加路径,比如:/usr/bin/ruby /opt/tools/mysqlbackup.rb

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