私はすべてのcronジョブ出力を(電子メールではなく)ファイルに保存しようとしました。エイリアスは /etc/aliases に設定されます。
logthecron: "|cronlog.sh"
そしてcrontabからMAILTO=logthecron
。 cronlog.sh ファイルは出力をファイルに書き込みます。
#!/bin/sh
$@ 2>&1 | sed -e "s/\(.*\)/[`date`] \1/" >> /tmp/a
メール送信を使用しています。 Sendmailは、/ etc / smrshディレクトリを介してSendmailで使用できるランチャーの明示的なリストを指定できる制限されたシェルユーティリティであるsmrshを使用します。だから私はcronlog.shをシンボリックリンクし、そのディレクトリにメールを送りました。まるで…
ln -s /root/cron/cronlog.sh /etc/smrsh/
それでもこのエラーは引き続き発生します。
May 10 09:33:11 sandbox01 smrsh: uid 8: attempt to use "cronlog.sh"
May 10 09:33:11 sandbox01 sendmail[23870]: x4ADXB5Y023868: to="|cronlog.sh", ctladdr=<logthecron@[hostname]> (8/0), delay=00:00:00, xdelay=00:00:00, mailer=prog, pri=30787, dsn=5.0.0, stat=Service unavailable
May 10 09:33:11 sandbox01 sendmail[23870]: x4ADXB5Y023868: x4ADXB5Y023870: DSN: Service unavailable
注:私はCentOS v7を使用しており、ファイルは実行可能で、電子メールは問題なく動作します。エイリアスからディレクトリ全体をパスしようとしました。別のcronjob出力を作成したくありませんが、cronジョブのすべての出力は特定のファイルです。
引用:
答え1
を使用せずMAILTO
(常に電子メールアドレスとして解釈されている)代わりにを使用してくださいSHELL
。
SHELL
与えられたコマンドを実行し、出力をファイルに送信する小さな実行可能シェルスクリプトへのパスを設定します。
#!/bin/sh
now=$(date)
/bin/sh "$@" 2>&1 | awk -v now="$now" '{ printf("[%s]\t%s\n", now, $0) }' >/tmp/cronjob.log
これはcrontabファイルの作業仕様"$@"
に拡張されます。二重引用符で書くことが重要です。-c
"$@"
クローンタブでは、以下を使用してください。
SHELL=/path/to/cronrun
# rest of crontab below...
(/path/to/cronrun
短いスクリプトへの正しいパスを仮定)