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


8

我希望每次服务器启动时都运行一个.jar文件(我们使用的是VPS),因此我使用crontab -e,然后添加来编辑crontab @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 ,因此ID 在中列出screen -ls。相反,我必须去/run/screen/S-root查找ID,然后screen -X -S $name quit在其上使用典型的ID 。

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

Answers:


15

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

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

1
我尝试了两个选项,一个选项包含一个较长的文件,然后一个选项包含两个独立的文件,但是现在根本无法创建屏幕会话。我已经尝试直接从命令行运行命令,但是那也不起作用..:/
Jacob Larson 2014年

您收到错误消息或其他内容吗?首先,使bukkit.sh脚本在命令行上运行。接下来,检查是否screen -S bukkit path/to/bukkit.sh有效。接下来,检查是否screen -d -m -S bukkit path/to/bukkit.sh有效。最后,设置cron。首先尝试最简单的方法,然后采取一些步骤,以便您了解哪些步骤会中断。告诉我,如果需要帮助,还会显示错误消息。
janos 2014年

1

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

# update-rc.d cron defaults

@JacobLarson谢谢您。.如果能帮到您,最好标记为答案并
投票
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.