Cronジョブが機能しません(または少なくとも機能する必要があるファイルにログを記録)。

Cronジョブが機能しません(または少なくとも機能する必要があるファイルにログを記録)。

クローンジョブの設定は次のとおりです。

*/15  * * * * speedtest >> /home/pi/speedtest.log

スクリプトはspeedtest次のとおりです。

#!/bin/sh
speedtest-cli --csv >> /home/pi/speedtest.log

Speedtest-CLIを使用してください。ジョブは時間通りに実行されますが、私が取得するのは次のcron出力のみです。

Jul 19 08:17:01 raspberrypi CRON[29275]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Jul 19 08:30:01 raspberrypi CRON[29378]: (pi) CMD (speedtest >> /home/pi/speedtest.log)
Jul 19 08:30:01 raspberrypi CRON[29377]: (CRON) info (No MTA installed, discarding output)
Jul 19 08:45:01 raspberrypi CRON[29430]: (pi) CMD (speedtest >> /home/pi/speedtest.log)
Jul 19 08:45:01 raspberrypi CRON[29429]: (CRON) info (No MTA installed, discarding output)
Jul 19 09:00:01 raspberrypi CRON[29608]: (pi) CMD (speedtest >> /home/pi/speedtest.log)
Jul 19 09:00:01 raspberrypi CRON[29607]: (CRON) info (No MTA installed, discarding output)
Jul 19 09:15:01 raspberrypi CRON[29791]: (pi) CMD (speedtest >> /home/pi/speedtest.log)
Jul 19 09:15:01 raspberrypi CRON[29790]: (CRON) info (No MTA installed, discarding output)

しかし、speedtest.logが更新されるのを見ることはできません。どうしたの?

答え1

ジョブがによって実行されているcronか、systemd起動スクリプトがデスクトップで実行されているのと同じランタイム環境で実行されていません。systemdでスクリプトを起動しますroot。変更やその他の環境変数の設定は、ジョブにPATH自動的に伝播されませんcron。たとえば、no$DISPLAYなので、GUIプログラムには特別な処理(読み取りman xhost)が必要です。

cron環境変数は、すべてのジョブの読み取りファイルで設定できます。crontabman 5 crontab

echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias各環境の結果を確認してください。

その行はデフォルトで解釈されるため、構文はcommandそれよりも単純なので、環境を設定した後に必要なプログラムを呼び出すスクリプト(実行可能、インストール、開始)を呼び出すことをお勧めします。crontab/bin/sh/bin/bashcommandbash#!/bin/bash

関連情報