作成したスクリプトがあり、ルートで正しく実行されます。クローンジョブを追加しましたが、正しく実行されません。
コマンドは次のとおりです。
gpio -g mode 17 input
getval="$(gpio read 17)"
todayis=$(date)
getstatus=$getval
if [ "$getstatus" = "0" ]; then
power="Power ON"
else
power="Power OFF"
echo $todayis $power $getstatus >> /var/www/turnmeon.log
ルートとして実行したときのログファイル:
Wed Nov 8 21:11:41 UTC 2017 Power ON 0
crontabで実行したときのログファイル:
Wed Nov 8 21:11:41 UTC 2017 Power OFF
OFFが実際に真であれば、予想したように最後に1がありません。
crontabジョブの代わりにbashプロンプトで実行されるのはなぜですか?
*/2 * * * * bash /myscript.sh
答え1
権限の問題のようです。おそらくデスクトップユーザーとしてcrontabを編集しているでしょう。これは、ジョブがデスクトップユーザーとして実行されることを意味します。ジョブにrootが必要な場合は、rootでcrontabを編集する必要があります。
答え2
考えられる理由は、cronに使用できるものgpio
がないからです。PATH
たとえば、gpio コマンドへのフルパスを指定します。
getval="$(/sbin/gpio read 17)"
システムはそのファイルがどこにあるかを調べるために使用しますwhich gpio
。
私は組み込みソリューションを頻繁に修正しているので、以前はこの問題で苦労しました。スクリプトがより複雑な場合は、通常は作業を簡単にするために、最初にPATHとLD_LIBRARY_PATHを初期化します。