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

Jac*_*son 12 server command-line bash scripts cron

我希望每次服务器启动时都运行一个 .jar 文件(我们使用的是 VPS),因此我使用crontab -e并添加了@reboot bash /home/bash/startserver.sh. 但我什至还没有到脚本可以工作的地步。

这是我的脚本:

#!/bin/bash
screen -S bukkit
cd $HOME/server
java -jar bukkit.jar
Run Code Online (Sandbox Code Playgroud)

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

唯一的问题是,当这个脚本运行时,它会创建一个屏幕会话,但是它的 ID没有在 中列出screen -ls,因为 ID 是空白的。相反,我必须去/run/screen/S-root寻找ID,然后使用典型的screen -X -S $name quit就可以了。

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

jan*_*nos 25

以分离模式启动屏幕,并使其在其中运行您的命令:

screen -d -m -S bukkit bash -c 'cd $HOME/server && java -jar bukkit.jar'
Run Code Online (Sandbox Code Playgroud)

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

#!/bin/bash -e
cd ~/server
java -jar bukkit.jar
Run Code Online (Sandbox Code Playgroud)

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

screen -d -m -S bukkit path/to/bukkit.sh
Run Code Online (Sandbox Code Playgroud)