
Pythonプログラムを実行し、プログラムが終了した後にシステムをシャットダウンする最善の方法(最も安全な方法)が気になります(Sshセッションでsudoを使用)。
私が最初にやりたかったことは次のとおりです。
nohup python py_name.py && sudo shutdown -h now &
または
nohup python py_name.py ; sudo shutdown -h now &
(sudo
Sshセッションにあり、それなしでは閉じることができず、実行後にシステムを残したいnohup
からです)&
問題は、Pythonプログラムが約5〜8時間かかり、後でpwシェルプロンプトを表示したくないことです(最初のコマンドを実行したときにプロンプトを表示できますか?)。私のシステムはUbuntu 18.04なので、sudoタイムアウト(15分?)のために「sudoing」も機能しないようです。
1つのオプションは、両方のコマンドを使用してスーパーユーザーモードに切り替えるか、スクリプトを作成して実行することですsudo ./script
。しかし、Pythonプログラムを実行していることを考慮すると安全ですか? (簡単な家庭用コンピュータの設定なので問題にならない場合があります。)
私が知らない他の方法はありますか?
- - - 編集する - - -
私は走ろうとしましたsudo sh -c 'python py_name.py && sudo shutdown -h now'
。sudo sh -c 'command'
コマンドを実行するには、別のシェルを実行してください。すべてのシェルがsudoにあるので、これはうまくいきます。問題は、私はPython環境を使用していますが、この新しいシェルが有効になっていないことです。
- - -解決策 - - -
実際の解決策は、上記のように(ソリューションを介して)sudoersファイルを変更して、実行時にsudo visudo
パスワードを必要としない項目のリストにshutdownを追加することですsudo shutdown
。すべてのsudoersファイルは異なりますが、私の場合は、my_username ALL=(ALL) NOPASSWD: /sbin/shutdown
最初の「スペース」がタブ文字で、/sbin/shutdown
実行したいコマンドのパスである場所を追加する必要がありました(check pathを使用できますcommand -v shutdown
)。
答え1
/etc/sudoers ファイルで、このユーザーに対してパスワードのない sudo を設定できます。たとえば、SSHサーバーでは(もちろん、より厳しいかもしれません。つまり、パスワードをオフにすることを許可しないなど):
ユーザー ALL = (ALL) NOPASSWD: ALL