0

cron経由で3時間ごとに呼び出したいshスクリプトがあります。このスクリプトは一連の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)"
4

2 に答える 2

2

Crontabは、コマンドを呼び出すときに通常のユーザー環境をロードしないため、bashスクリプトまたはnode.jsのものが依存する他の環境変数は存在しません。たとえば、シェルはどのようにして「ノード」コマンドを見つけますか?

cronスクリプトはユーザーアカウントのbash環境では実行されないため、シェルで直接実行することは有効なテストではありません。

于 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 に答える