cronで実行されたスクリプトから再起動しようとすると、Ubuntu 18.04 "/dev/initctlを開けませんでした:権限が拒否されました"

cronで実行されたスクリプトから再起動しようとすると、Ubuntu 18.04

エラーが発生した後にコンピュータを再起動するPythonプログラムがあります。

main.py:

import os

if (some_error):
    os.system('/sbin/reboot')

これを機能させるために、NOPASSWDこのスクリプトを実行しているユーザー用のsudoersファイルを追加しました。

/etc/sudoers:

adam ALL=NOPASSWD:/sbin/reboot

Pythonプログラムは、競合が発生しても実行を継続するために、単純なbashスクリプトを介して実行されます。

実行.sh:

#!/bin/bash

myscript(){
    python3 main.py > log 2>&1
}

until myscript; do
    echo "program crashed with exit code $?. Restarting..." >&2
    sleep 1
done

このrun.shスクリプトは、再起動時にcronファイルを介して実行されます。

/etc/cron.d/my_cron_file:

@reboot adam cd /home/adam && ./run.sh

今私の問題は次のとおりです。 CLI で実行するか直接実行すると、正常に動作して再run.sh起動main.pyします。ただし、@rebootでcronファイルを介して実行すると、次のように出力されます。

Failed to set wall message, ignoring: Interactive authentication required.
Failed to reboot system via logind: Interactive authentication required.
Failed to open /dev/initctl: Permission denied
Failed to talk to init daemon.

プロセスを調べてみると、ps auxCLIで実行するときに機能するように、明示的に権限を持つユーザーとして実行されています。それでは、cronを使って実行したときになぜ機能しないのですか?adam/sbin/reboot

ベストアンサー1

おすすめ記事