サーバーの起動時にtmux内でスクリプトを実行するにはどうすればよいですか?

サーバーの起動時にtmux内でスクリプトを実行するにはどうすればよいですか?

アクティブな状態を維持するためにtmuxセッションで実行するボットがあります。時々サーバーが再起動し、家にいない場合、またはインターネットが接続されていない場合、ボットはオフラインのままになります。クローンタスクを追加してボットを起動できます。このようなスクリプトがあります。

tmux new -s bot
bash '/home/user/bot_start.sh'

しかし、それがすることは、新しいtmuxセッションを開始して実行することです。

bot_start.sh

tmux セッション外。開かれたtmuxセッション(たとえば「bot」)でスクリプトを実行したいと思います。

答え1

このtmuxコマンドは、セッションで実行する必要があるコマンドをコマンドラインの引数として使用します。引数が指定されない場合、対話型シェルが開始されます。コマンド(またはシェル)が終了すると、セッションtmuxも終了します。

だからあなたは使用することができます

tmux new-session -s bot bash "$HOME/bot_start.sh"

これにより、新しいtmuxセッションが開始され、そのセッションで指定されたスクリプトが実行されます。

セッションがすでに存在するかどうかをテストし、存在する場合は新しいセッションを開始したくない場合は、次の手順を実行します。

! tmux has-session -t bot 2>/dev/null && tmux new-session -s bot bash "$HOME/bot_start.sh"

またはもう少し詳しく言うと、

if ! tmux has-session -t bot 2>/dev/null; then
    tmux new-session -s bot bash "$HOME/bot_start.sh"
fi

関連情報