我有一个机器人,我在 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