如何使用crontab启动屏幕会话?


12

我想创建一个crontab条目,以便它启动屏幕,启动游戏服务器并分离。这是为了防止服务器重新启动,并且我希望它为我自动启动它。

0 0 0 0 0(命令)

应该在启动时运行。

它运行位于〜/ cube / server.sh的shell文件


您是这台计算机上的用户,还是可以访问初始化脚本?
Corey S.


@丹尼斯:是的,我喜欢。但是我们不能假设他正在运行的游戏服务器没有需要访问的某种控制台(即始终在前台运行)。否则他为什么还要打扰屏幕?当然,除非他不了解nohup和背景知识。
Corey S.

我是这台机器上的用户。
维克多

Answers:


15

这样的事情应该起作用。此示例生成一个屏幕并运行“ top”:

screen -d -m top

如图所示,在您的crontab中,您想要执行以下操作:

@reboot /usr/bin/screen -dmS gameserver-screen /opt/mycoolgame/bin/gameserver

当然,如果游戏服务器需要“正常”环境设置,则可以通过以下方法更进一步:

@reboot (. ~/.profile; /usr/bin/screen -dmS gameserver-screen /opt/mycoolgame/bin/gameserver)

1
. ~/.profile零件做什么?
维克多

它强制设置cron条目的环境。没有它,您只会得到几个非常具体的条目。(有关详细信息,请参见man crontab)
Corey S.

我有一个执行游戏服务器的.sh文件,那么这行得通吗? @reboot (. ~/cube; /usr/bin/screen -dmS gameserver-screen ./server.sh)
维克多

那可能是最好的方法。如果可行,您可能不必担心配置文件,但是如果您需要完整的$ PATH等,则始终可以从server.sh脚本中获取.profile文件。
Corey S.

5

这应该足够了...运行

$ crontab -e

然后输入:

@reboot screen -dmS Victor

您能否尝试解释一下“ Victor”命令与运行脚本(例如,OP询问的脚本)之间的关系?
Patrick

1
-S仅用于会话名称
atx 2016年


0

我也有类似情况,但是由于其他不合理的限制,我无法使用crontab。我实际上有inittab调用屏幕。(替换了一些名称以掩盖信息):

XXX:5:respawn:/bin/su - useraccount -c "screen -D -m -c /home/xxxxxx/file.screenrc"

在“ file.screenrc”中,我设置了几个选项:

sessionname obscuresessionname
multiuser on
cd
screen /home/xxxxxxx/programtostart

这样,它将在启动时启动,并且如果程序终止运行或屏幕关闭,它将重新生成。它可能不被认为是常规的,但是我不得不处理一些奇怪的环境要求。但是,如果我们需要删除它,则必须注释掉该行,并终止会话。然后,当准备好将其备份时,取消注释并初始化q。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.