sudo
特権のあるリモートホストでスクリプトを実行したいのですが、誰かが次のコマンドを使用するnohup
必要があると提案しました。ssh -t
スクリプトはls; sleep 10; echo finish
私が望むものと同様にここで書かれています。
ssh -t esolve@remote_host \
'sudo nohup bash -c "ls;sleep 100;echo finish" < /dev/null 2>&1 >> ssh.log'
このコマンドの後のスクリプトには次のような他のコマンドがあるので、このスクリプトを localhost のバックグラウンドで実行したいと思います。
my script.sh
:
ssh -t esolve@remote_host \
'sudo nohup bash -c "ls;sleep 100;echo finish" < /dev/null 2>&1 >> ssh.log'
... some other commands
次の2つのコマンドは機能しません
ssh -t esolve@remote_host \
'sudo nohup bash -c "ls;sleep 100;echo finish" < /dev/null 2>&1 >> ssh.log' &
ssh -t esolve@remote_host \
'sudo nohup bash -c "ls;sleep 100;echo finish" < /dev/null 2>&1 >> ssh.log &'
なぜ?
このコマンドをlocalhostのバックグラウンドで実行するにはどうすればよいですか?また、sudo
リモートホストにパスワードを入力する必要はありません。
答え1
-b
必要に応じてパスワードの入力を求めるフラグを追加し、sudo
バックグラウンドに移動します。 (リダイレクトはbashでも実行する必要があります)(すべてにリダイレクトを適用するには中括弧が必要です)
ssh -t esolve@remote_host 'sudo -b nohup bash -c "{ ls;sleep 100;echo finish; } < /dev/null 2>&1 >> ssh.log"'
画面を試してみることもできます。
ssh -t esolve@remote_host 'sudo -b screen -m -d bash -c "{ ls;sleep 100;echo finish; } < /dev/null 2>&1 >> ssh.log"'