私はUbuntu 16.04を使用していて、次のtmux
ソリューションが必要です。これは、sleep
で満足できず、at
でバグが発生したため(Nohup-sleep
を組み合わせた場合)、Nohup
でタイムアウトプロセスを実行したいためです。今、tmux
は独自のno-hangupメカニズムを備えており、実際に手動で正常に動作しているため、最善の代替手段と思われます(手動で実行できるプロセスの自動化に関してのみ質問します) )。
次の3つのアクションをすべて1つの操作で実行する方法が必要です。
tmux
セッションをアタッチします。(sleep 30m ; rm -rf dir_name ; exit)
のように、準備が整った一連のコマンドをそのセッションに注入する。私は特に、複数行のセットを優先します。1つの長い行ではありません。tmux
セッションでstdinとして書き込まれます。つまり、その原因のために特別に作成された別のtmux
セッションでコードセットを実行し、すべてを1つの操作で実行したいのです。
私は最初の作業セッション(ほとんどの時間から作業しているセッション)からすべてを行うことを目指しています。通常、私は新しく作成されたセッションにアクセスするつもりはありません。自動的に実行されるコードを使用して作成したいだけです。
できれば、ヒアドキュメントの解決策をお勧めします。最も効率的だと思います。
あなたが実行したいコードを例えば/opt/my_script.sh
、必要なことを簡単に実行できます。
tmux new-session -d -s "myTempSession" /opt/my_script.sh
これにより、「myTempSession」という名前の新しい分離セッションが開始され、スクリプトが実行されます。後でtmux attach-session -t myTempSession
を実行することにより、何に接続しているかを確認できます。
それは、私の意見では、最も簡単でエレガントなソリューションです。 tmuxを使用してstdin(「ヒアドキュメントから」を読む)からコマンドを実行する簡単な方法は知りません。あなたの周りをハッキングすることでそれを行うことさえできるかもしれませんが、それでもハックのようです(そしてハックのように見えます)。
たとえば、上記のコマンドを使用して必要な動作をシミュレートするハックです(=ヒアドキュメントから新しいtmuxセッションでコードを実行します。一時ファイルが作成されるため、サーバーのハードドライブで書き込みは発生しません/dev/shm
、これはtmpfsです):
(
cat >/dev/shm/my_script.sh &&
chmod +x /dev/shm/my_script.sh &&
tmux new-session -d '/dev/shm/my_script.sh; rm /dev/shm/my_script.sh'
) <<'EOF'
echo "hacky, but works"
EOF
send-の使用例については、 https://serverfault.com/questions/339390/run-command-in-detached-tmux-session も参照してください。 keys 切り離されたペインでのコマンド。