2019年6月25日火曜日

【RaspberryPi】起動時やcronシェルスクリプトが途中から実行されていない?

う~ん
結構どーしようもない感じで詰まっていました。
原因さえわかってしまえば何ということはなかったのですが。

といった感じで今回の雑記です。
以前の記事で起動時やcronを使用してシェルを実行したり
といったことをしていたのですが、
この時にシェルが正しく動作してくれない時があって、なんでかなぁとなっていました。

起動後に端末からシェルスクリプト実行等していると
その時はちゃんと動いている(最後まで実行される)ので、
これはなんなんやと。



____________________________________

自動実行のシェルが最後まで実行されていない?



今回詰まったのは、シェルがどうも最後まで動いていない、ということでした。
処理の合間に

echo "" > /home/pi/a0000.txt

とか挟んでおいて実行すると確かに始めの方は実行されている。
だけど最後までは実行されていない。ということが分かりました。
(echo出力されていないファイルが一部存在している)


また、シェルによっては一個も出てないものもありました。


しかし、コンソールを起動して、
コンソール上からシェルをコマンドで実行すると出力されている…
そんな状況が発生していました。


____________________________________

そもそも処理が実行できていない



後者の「echoファイルが一つも出力されないシェル」に関しては、
割とすぐに原因が分かりました。


どうにもこのシェルに実行権限がないんですね。
これに関してはchmodコマンドで実行権限を付与することで動くようになりました。

chmod +x /home/pi/test.sh

実行権限自体がないので実行できない…と。


____________________________________

途中の処理でエラーを吐いている



途中まで処理が実行できているシェルの方に関しては、
実行権限自体は付与されているようでした。
しかし、コンソール上で実行した時の出力等を見ていると、
処理中にエラーを吐いたりしているみたいです。


このエラー出力によってそのあとの処理が流れていないのでは?
echoによる出力ファイルのステップ位置も、エラー出力の位置と合っています。


今回はrmコマンド位置がエラー出力していました。
削除する対象のファイルがない時に出力していました。
(削除できるときはエラーを出していない)


sudo rm /home/pi/hoge.txt

削除前にファイルの存在チェックを行うようにしてみました。

TARGETFILE="/home/pi/hoge.txt"
if [ -e $TARGETFILE ]: then
  sudo rm $TARGETFILE
fi


…ファイルがなくても以降の処理に流れるようになりました。
rmコマンドで削除先がない場合は気を付けないといけませんね。


他にも、
サービスの立ち上げが失敗したとか、
処理失敗によってエラーコードを返す可能性のある部分は
そこで処理が止まってしまうようなので、
処理を止めずに最後まで実行したい場合は
注意してみるといいかもしれないですね。


めっちゃ詰まってしまった…。


____________________________________


0 件のコメント:

コメントを投稿