だからtmuxを介してシェルコマンドを実行したいのですが、バックグラウンドでtmuxセッションから切り離されています。
tmux new-session -A -s myprogramsession \; send -t myprogramsession "nohup /usr/bin/myscript.sh &>/dev/null &" ENTER \; detach -s myprogramsession
これはうまくいきます。ただし、上記のセッションから切り離された後にtmuxを停止するには、次の手順を実行する必要があります。
これ:
tmux new-session -A -s myprogramsession \; send -t myprogramsession "nohup /usr/bin/myscript.sh &>/dev/null &" ENTER \; detach -s myprogramsession \; kill-session -t myprogramsession
またはこれ:
tmux new-session -A -s myprogramsession \; send -t myprogramsession "nohup /usr/bin/myscript.sh &>/dev/null &" ENTER \; detach -s myprogramsession && pkill tmux
一見すると、2つの方法(pkill
およびkill-session
fromを使用する方法の1つ)が機能しているように見えましたが、ブロックされたプロセス/スクリプトがすべてfromを介して開始されたことを確認しました。tmux
nohup
滞在するバックグラウンドでこれを行った最初の試みと比較します(停止の部分を除くtmux
)。
tmux
(上記の例に基づいて)セッション(バックグラウンド)でシェルコマンドを開始および切断し、シェルtmux
コマンドがバックグラウンドで実行され続けながら完全に停止するにはどうすればよいですか?
答え1
思ったより簡単に見えますね。
tmux new-session -A -s myprogramsession \; send -t myprogramsession "nohup /usr/bin/myscript.sh &>/dev/null &" ENTER \; detach -s myprogramsession && sleep 1 && pkill tmux
sleep
入る前にを追加すると機能しますpkill
。しかし、おそらく最善の解決策ではないでしょう。