![如何在服务器启动时在 tmux 内运行我的脚本](https://linux22.com/image/142528/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%90%AF%E5%8A%A8%E6%97%B6%E5%9C%A8%20tmux%20%E5%86%85%E8%BF%90%E8%A1%8C%E6%88%91%E7%9A%84%E8%84%9A%E6%9C%AC.png)
我有一个机器人,我在 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