【发布时间】:2012-08-18 09:32:02
【问题描述】:
我有一个 sh 脚本,我想通过 cron 每三个小时调用一次。该脚本调用了一堆 node.js 脚本,并且在直接调用时可以完美运行。但是,当通过 cron 调用时,我得到了 sh 脚本记录的日期,但没有来自我的 node.js 脚本的其他日志(直接调用 sh 时所有日志都很好)。知道为什么吗?
脚本位于内部目录中,但我使用的是所有绝对路径。请在下面找到我的代码,如有必要,请在 Github 上找到有关 node.js 内容的更多详细信息(注意:服务器最近从 sh 更改为 bash,但我认为这不会产生任何实际影响)。
Crontab
SHELL=/bin/sh
MAILTO=my@email.com
0 */3 * * * /absolute/path/to/script.sh
script.sh
#!/usr/bin/env sh
node /absolute/path/to/script1.js
node /absolute/path/to/script2.js
node /absolute/path/to/script3.js
LOGFILE=/absolute/path/to/error.log
log(){
message="$@"
echo $message
echo $message >>$LOGFILE
}
log "Cron performed $(date)"
【问题讨论】:
-
来自 crond 的路径不能用于您的节点命令
-
不这么认为。如果我使用直接从
crontab -e复制的路径调用bash /absolute/path/to/script.sh,它可以正常工作。 -
也尝试指定
node的完整路径。 -
@Primus202,但是您的脚本没有使用 bash,即使使用了,也不会使用您自己的环境。使用
node的完整路径 -
尝试了完整路径(即
/usr/local/bin/node /absolute/path/to/twitterupdate.js),仍然没有骰子。
标签: bash node.js cron crontab sh