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)"