0

我有一个 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

脚本.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)"
4

2 回答 2

2

Crontab 在调用命令时不会加载您的普通用户环境,因此您的 bash 脚本或 node.js 内容所依赖的任何其他环境变量都不会存在。例如,您的 shell 如何找到“节点”命令?

Cron 脚本不会在您的用户帐户的 bash 环境中运行,因此直接在您的 shell 中运行它们不是有效的测试。

于 2012-08-23T10:01:41.097 回答
0
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
SHELL=/bin/sh
MAILTO=my@email.com
0 */3 * * * /absolute/path/to/script.sh
于 2012-08-23T17:01:17.623 回答