使用 crontab 通过 bash 脚本创建 Screen 会话

使用 crontab 通过 bash 脚本创建 Screen 会话

我希望每次服务器启动时运行一个 .jar 文件(我们正在使用 VPS),因此我使用 编辑了 crontab crontab -e,然后添加了@reboot bash /home/bash/startserver.sh。但我甚至还没有到达脚本完全起作用的地步。

这是我的脚本:

#!/bin/bash
screen -S bukkit
cd $HOME/server
java -jar bukkit.jar

我需要使用它的原因screen是,当我启动 bukkit.jar 时,它会进入一个控制台,我可以在其中输入该程序的更多命令(我相信你们都熟悉这个网站上的 Minecraft 及其服务器,哈哈),但我需要能够在它运行时以 root 身份执行其他命令以及其他程序的命令,甚至关闭我的 PuTTY 会话。

唯一的问题是,当运行此脚本时,它会创建一个屏幕会话,但它的 ID不是中列出的screen -ls,因为 ID 是空白的。相反,我必须去找到 ID,然后对其/run/screen/S-root使用典型。screen -X -S $name quit

也许这根本不可能,或者实际上有更简单的方法可以做到这一点(我希望更简单),但我不明白为什么这不起作用。如果这是可能的,那么在运行screen -S bukkitbash 脚本时是否可以重新加入会话?(我想有多个问题,但非常感谢您的帮助!(括号))

答案1

以分离模式启动屏幕,并让它在其中运行命令:

screen -d -m -S bukkit bash -c 'cd $HOME/server && java -jar bukkit.jar'

您可能需要创建一个专用脚本bukkit.sh

#!/bin/bash -e
cd ~/server
java -jar bukkit.jar

因此,如果脚本变得更加复杂,您不必为其写一长行screen,因此screen命令可以保持不变,只需:

screen -d -m -S bukkit path/to/bukkit.sh

答案2

您应该update-rc.d按照以下步骤在启动时启用服务:

# update-rc.d cron defaults

相关内容