テキストファイルへのいくつかの変更に基づいてスクリプトを実行するinotify cron(Incron)があります。以下は私のincrontabファイルでもあります
/home/pi/payload.txt IN_ATTRIB,IN_CLOSE_WRITE bash /home/pi/deploy.sh
incrontab が実際にスクリプトを実行していることを示すために、以下のログを示します。
Dec 23 19:17:01 raspberrypi /USR/SBIN/CRON[13526]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Dec 23 20:17:01 raspberrypi /USR/SBIN/CRON[25509]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Dec 23 21:17:01 raspberrypi /USR/SBIN/CRON[6389]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Dec 23 21:32:34 raspberrypi incrond[23252]: (pi) CMD (bash /home/pi/deploy.sh)
Dec 23 21:51:56 raspberrypi incrond[23252]: table for user pi changed, reloading
Dec 23 21:52:02 raspberrypi incrond[23252]: (pi) CMD (sh /home/pi/deploy.sh)
Dec 23 21:52:56 raspberrypi incrond[23252]: table for user pi changed, reloading
Dec 23 21:53:15 raspberrypi incrond[23252]: (pi) CMD (cd /home/pi/ && ./deploy.sh)
Dec 23 21:53:15 raspberrypi incrond[14102]: cannot exec process: No such file or directory
Dec 23 21:55:30 raspberrypi incrond[23252]: table for user pi changed, reloading
Dec 23 21:55:49 raspberrypi incrond[23252]: (pi) CMD (/home/pi/deploy.sh)
ノードサーバーを再起動し、Web経由でアクセスしようとすると、次のような禁止エラーが表示されることを除いて機能します。
Error: Forbidden
at SendStream.error (/home/pi/Code/borikanes/node/node_modules/express/node_modules/send/index.js:239:16)
at SendStream.pipe (/home/pi/Code/borikanes/node/node_modules/express/node_modules/send/index.js:425:19)
at serveStatic (/home/pi/Code/borikanes/node/node_modules/express/node_modules/serve-static/index.js:110:12)
at Layer.handle [as handle_request] (/home/pi/Code/borikanes/node/node_modules/express/lib/router/layer.js:82:5)
at trim_prefix (/home/pi/Code/borikanes/node/node_modules/express/lib/router/index.js:270:13)
at /home/pi/Code/borikanes/node/node_modules/express/lib/router/index.js:237:9
at Function.process_params (/home/pi/Code/borikanes/node/node_modules/express/lib/router/index.js:312:12)
at /home/pi/Code/borikanes/node/node_modules/express/lib/router/index.js:228:12
at Function.match_layer (/home/pi/Code/borikanes/node/node_modules/express/lib/router/index.js:295:3)
at next (/home/pi/Code/borikanes/node/node_modules/express/lib/router/index.js:189:10)
このシェル スクリプトはフラスコ サーバーも再起動しますが、問題なく再起動します。さらに奇妙なことは、シェルスクリプトを手動で(サーバーにSSHで接続して実行することにより./deploy.sh
)実行すると、正常に動作し、禁じられたエラーが発生しないことです。スクリプトを手動で実行したのと同じユーザーとして incrontab がスクリプトを実行しているにもかかわらず、これがどのように発生するかについて私は驚いています。
詳細情報を提供するには:スクリーンセッションを使用してフラスコとノードサーバーの両方を実行しているため、各サーバーには独自のスクリーンセッションがあります。そのため、bash スクリプトはスクリーン セッションを強制終了し、私の GitHub リポジトリから最新の変更を取得してから、スクリーン セッションでサーバーを再起動します。どちらもラズベリーパイで実行しています
私の最後の手段は nodemon を使用するか、実際にこのエラーが発生する理由を知りたいです。ありがとう!