【发布时间】:2011-02-08 08:29:12
【问题描述】:
我有一个调用 shell 脚本的 cron 作业。
*/2 * * * * sh cron_test.sh >> output.log
在 shell 脚本中,我运行了一些命令行,例如:
#!/usr/bin
./mongo/bin/mongodump .....
FILE_NAME='abc'
node mynode.js $FILENAME
如果我只是在命令提示符下调用 cron_test.sh,它就会运行。但是,如果它由 cronjob 运行,它不会运行 node。它确实运行 mongodump 命令。那么,怎么了?有什么我必须设置的权限等吗?
【问题讨论】:
-
您确定它可以从命令行运行吗?我的意思是,你还没有定义
FILENAME变量。 -
您确定节点在运行 cron 的用户的路径中吗?
-
你知道你有 2 个文件名变量:
FILE_NAME和FILENAME- 对吧? -
如果你问我,你应该使用像样的消息队列而不是 cronjobs。例如,Beanstalkd 延迟了 PUTS。
-
将 cron 条目更改为
*/2 * * * * cd WORKDIR && sh ./cron_test.sh >> output.log,其中 WORKDIR 是具有 mongo 子目录的目录,还将node...更改为./node...或/fully/qualified/path/node...。正如 macarthy 指出的那样,假设 cronjobs 在与登录 shell 提供的相同环境中运行是一个常见错误,但事实并非如此。