如何在服务器启动时在 tmux 内运行我的脚本

如何在服务器启动时在 tmux 内运行我的脚本

我有一个机器人,我在 tmux 会话中运行它以使其始终保持活动状态。有时,我的服务器会重新启动,如果我不在家或没有互联网,我的机器人就会保持离线状态。我可以添加一个 cron 作业来启动机器人。我有一个这样的脚本

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

但它所做的是启动一个新的 tmux 会话,但运行

bot_start.sh

在 tmux 会话之外。我希望它在打开的 tmux 会话中运行该脚本,即“bot”

答案1

tmux命令将应在会话中执行的命令作为命令行上的参数。如果未给出参数,则启动交互式 shell。一旦命令(或 shell)终止,会话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

相关内容