我想要做的就是创建一个 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
该脚本基于许多假设:
我使用 tmux 而不是 screen
您想要在 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"
几点评论:
- 您应该始终在脚本中使用绝对路径(
/bot/bot.sh
而不是./bot.sh
) - 如果你还想附加到会话,请取消注释最后一行
答案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
您应该能够将其附加screen
到screen -r Bot
。
你的第二个脚本完全错误:
screen -S Bot -d -m -c "cd bot" && ./bot.sh
-c
期望有一个文件:-c file
将默认配置文件从“$HOME/.screenrc”覆盖为文件。它
./bot.sh
在会话之外运行,因为&&
会分隔您的命令。因此,您仍然处于不存在的初始目录中bot.sh
。因此出现错误。