以下に3つのスクリプトがあります/etc/cron.daily
。私のcronログはを使用しています/var/log/cron
。以下は上記で実行されたcronのエントリです。
(root) CMD (run-parts /etc/cron.hourly)
このcron内のスクリプトはstdout
使用できません。これは、コマンドがフォルダで実行されたことを示します。stderr
run-parts
3つのスクリプトが実行されたときに何が起こるかを記録するのに役立つトリックはありますか?
cron.daily
注:出力とエラーをログファイルにリダイレクトするスクリプトを編集することはできません。
答え1
Unixでは、メールシステムは、システム通知がユーザーに転送される方法です。 Windowsと同様に考えればいい。通知が必要な場合は、ポップアップメッセージとともにタスクバーに何かが表示されます。理論的には、cronjobは出力を生成してはいけません(誰も出力を見ることができないため)、すべての出力(stdoutまたはstderr)は潜在的にバグや問題を示すと見なされるため、cronjobの所有者にそれに関するメッセージが表示されます。確認してください。
したがって、すべての出力(stdoutとstderr)はローカルメールシステムを介してcronjob所有者に送信されます。所有者が個人アカウントでない場合は、エイリアスを設定して実際の電子メールアカウントに中継するようにローカルMTAに指示できます。たとえば、次を追加します/etc/aliases
。
root: [email protected]
newaliases
次に、コマンドを実行します(メールエイリアスデータベースの再構築)。その後、会社の電子メール受信トレイからルートから電子メールを受信し始めました。
root@xxxxxxvlp05 ~ $ echo "the game" | mutt root -s "No Diggity"
sendmail: warning: inet_protocols: IPv6 support is disabled: Address family not supported by protocol
sendmail: warning: inet_protocols: configuring for IPv4 support only
postdrop: warning: inet_protocols: IPv6 support is disabled: Address family not supported by protocol
postdrop: warning: inet_protocols: configuring for IPv4 support only
これはかなり一般的な方法です(システムから通知メールを送信するようにします)。通知を処理する別の方法があります。いくつかの選択肢:
電子メールを特定のファイルに保存するには、エイリアスを編集してください。
root: /var/log/rootMails
メッセージをスクリプトにパイプします。
root: |/usr/local/bin/filterMail
エイリアスの問題を解決するもう1つの方法は、MAILTO=
多くのcronデーモンでサポートされているユーザーのcrontabオプションを使用することです。この実装が実行するアクションは、ユーザーのメールボックスに入る通知ではなく、特定のユーザーセットからのみ通知を受けたい場合にはaliases
より良いオプションです。
他にもたくさんあると確信していますが、最初や最後のことをしたいかもしれません。
答え2
cronを実行して-s
メールを送信する代わりにsyslogを使用することを選択できます。これは、少なくともRHELとその派生製品であるFreeBSDとMacOSに適用されます。
答え3
Bashスクリプトに自分自身を記録できます。
logfile=/var/log/mine/whatever.log
log () {
timestamp=$(date +'%F %T')
echo -e "$timestamp $1" >> $logfile
shift
for a; do
echo -ne "$a" >> $logfile
done
}
log "Hello world.\nAnd so on..."
[...]
記録したい出力を含むコマンドを実行する場合:
somecommand 2>&1 >> $logfile
また、メッセージとエラーをシステムロガー(参考資料を参照)に送信し、man logger
syslog設定で並べ替えることもできます。