ForegroundでCronを実行した時にCronで実行される各処理の標準出力,標準エラー出力に出力した内容は、 Cronの標準出力,標準エラー出力に出力されずにいずこかへ消えます。 今回は、各処理Cronの標準出力,標準エラー出力にリダイレクトして出力させます。
先に答えを書いておくと /proc/{CronのプロセスID}/fd
配下の1
と2
にそれぞれを出力すればOKです。
* * * * * /main.sh >/proc/$(</var/run/crond.pid)/fd/1 2>/proc/$(</var/run/crond.pid)/fd/2
/proc/{CronのプロセスID}/fd/1
などは、/dev/pts/1
などのデバイスファイルのシンボリックファイルなので、
procfsが実装されていない環境では、lsof
から標準出力,標準エラー出力のデバイスファイルのパスが取得できます。
そのパスに出力すれば似たような挙動を得られます。
ただし、このやり方はrootユーザでの話なので、別ユーザで実行する場合については別記事で書こうかなと思います。
環境
今回はprocfsが使えるLinuxで検証したかったので、以下のDockerfileで環境を作ってコンテナ上でcron -f
を実行して確認しました。
FROM ubuntu:20.04 RUN apt-get update && \ apt-get install --no-install-recommends -y cron vim && \ rm -rf /var/lib/apt/lists/* CMD ["bash"]