Incron はスクリプトを実行しませんが、Cron は実行します。権限が拒否されました

Incron はスクリプトを実行しませんが、Cron は実行します。権限が拒否されました

rclone を実行するための簡単なスクリプトがあります。これは、ルート コマンド ラインから適切に実行されます。また、通常の cron ジョブによって呼び出された場合も適切に実行されます。スクリプトの権限は root/root 0755 に設定されており、実行可能です (rclone も同様です)。

incrontab -e次の行は、によって設定され、確認されたincronジョブです。icrontab -l

/var/vhosts/localdir IN_ALL_EVENTS /bin/rclonescript.sh

以下は、コマンド ラインまたは通常の cron ジョブから実行されるスクリプトです。

#!/bin/bash
/usr/sbin/rclone copy /var/vhosts/localdir mygoogledrive:uploadfolder

以下は出力ですtail -f /var/log/cron:

Mar 16 18:45:55 localhost incrond[8215]: (root) CMD (/bin/rclonescript.sh)

出力は問題ないように見えますが、スクリプトは実行されません。

スクリプトが cron ジョブから正常に呼び出されたときの cron ログは次のようになります* * * * * /bin/rclonescript.sh

Mar 16 18:59:01 localhost CROND[9070]: (root) CMD (/bin/rclonescript.sh)

ログは実質的に同じですが、cron ジョブは機能します。Incron は機能しません。

まず、次の点を確認して、スクリプトでパスを設定しようとしました。

[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

...次に、次のようにスクリプトへのパスを追加します。

#!/bin/bash
Path=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin   
/usr/sbin/rclone copy /var/vhosts/localdir mygoogledrive:uploadfolder

これをクローンジョブとして実行しようとすると、次のようになります。

/var/vhosts/anne_scan IN_ALL_EVENTS,IN_NO_LOOP /bin bash rclonescript.sh

または

/var/vhosts/anne_scan IN_ALL_EVENTS,IN_NO_LOOP /bin rclonescript.sh

結果としてアクセスが拒否されます:

Mar 17 09:00:27 localhost incrond[24917]: cannot exec process: Permission denied

答え1

sudo次のようにコマンドの前に追加します。

/var/vhosts/watcheddir IN_ALL_EVENTS,IN_NO_LOOP sudo /bin/sh /bin/yourscript.sh

次のようにユーザーを選択します。

/var/vhosts/watcheddir IN_ALL_EVENTS,IN_NO_LOOP sudo -u username /bin/sh /bin/yourscript.sh

関連情報