如何创建 sh 脚本以使用 Screen 会话或 Tmux 会话运行另一个 sh 脚本

如何创建 sh 脚本以使用 Screen 会话或 Tmux 会话运行另一个 sh 脚本

我想要做的就是创建一个 bash 脚本,该脚本在另一个文件夹中运行另一个 bash 脚本,但使用分离的屏幕会话。此外,它应该以非 root 用户身份执行。以下是我所做的:

#!/bin/sh
cd /bot/ && screen -S Bot -d -m ./bot.sh
chmod +x script.sh

运行之后./script.sh,它没有给我错误,但没有回应。

我也尝试过:

#!/bin/sh
screen -S Bot -d -m -c "cd bot" && ./bot.sh

并出现此错误: ./script.sh: line 1: bot.sh: No such file or directory

我还有一个小问题:如何编写脚本来跟踪此会话,以便在会话或机器人终止时重新运行它?提前致谢。

答案1

该脚本基于许多假设:

  1. 我使用 tmux 而不是 screen

  2. 您想要在 tmux 中运行的脚本是/bot/bot.sh

因此./script.sh我的建议如下:

#!/bin/sh
sessname="Bot"

# Create a new session named "$sessname"
tmux new-session -d -s "$sessname"

# Run command in the session "$sessname"
tmux send-keys -t "$sessname" "/bot/bot.sh" Enter

# Attach to the session "$sessname"
#tmux attach -t "$sessname"

几点评论:

  1. 您应该始终在脚本中使用绝对路径(/bot/bot.sh而不是./bot.sh
  2. 如果你还想附加到会话,请取消注释最后一行

答案2

我想您的第一个选项工作正常,但screen将以分离模式运行,因此您不会看到外面的输出screen

检查screen -ls正在运行的screen会话并附screen -r ID加到它们。

无论如何,您最好使用绝对路径:/bot/bot.sh而不是cd /bot/ && ./bot.sh

#!/bin/sh
screen -S Bot -d -m /bot/bot.sh

您应该能够将其附加screenscreen -r Bot


你的第二个脚本完全错误:

screen -S Bot -d -m -c "cd bot" && ./bot.sh
  • -c期望有一个文件:

    -c file 将默认配置文件从“$HOME/.screenrc”覆盖为文件。

  • ./bot.sh在会话之外运行,因为&&会分隔您的命令。因此,您仍然处于不存在的初始目录中bot.sh。因此出现错误。

相关内容