我正在尝试在我的Ubuntu服务器的开头运行shell脚本和命令。
这是我的CRON
@reboot /home/steam/check.sh
@reboot screen -d -S up -m node /var/www/html/Up1/server/server.js
我在日志中得到的内容:
grep CRON /var/log/syslog
Jul 19 19:48:28 vc1s cron[3185]: (CRON) INFO (pidfile fd = 3)
Jul 19 19:48:28 vc1s cron[3185]: (CRON) INFO (Running @reboot jobs)
Jul 19 19:48:28 vc1s CRON[3209]: (root) CMD (screen -d -S up -m node /var/www/html/Up1/server/server.js)
Jul 19 19:48:28 vc1s CRON[3211]: (root) CMD (/home/steam/check.sh)
Jul 19 19:51:20 vc1s cron[3779]: (CRON) DEATH (can't lock /var/run/crond.pid, otherpid may be 3185: Resource temporarily unavailable)
Jul 19 19:55:01 vc1s CRON[3996]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
我的check.sh
。
#!/bin/bash
until screen -d -S unturned -m /home/steam/start.sh; do
echo "Server 'myserver' crashed with exit code $?. Respawning.." >&2
sleep 1
done
我的start.sh
。这是用于启动未经修饰的游戏服务器。我不认为这个剧本很重要,但我想我应该告诉你。
#!/bin/bash
# This script starts a Unturned 3 server on Linux machines
# Syntax: start.sh <instance name>
# Author: fr34kyn01535
#CONFIG
INSTANCE_NAME=1
STEAMCMD_HOME="./steamcmd"
UNTURNED_HOME="./unturned"
#COLORS
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLLOW='\033[0;33m'
NC='\033[0m'
#Steam checks
STEAMCMD_API=$STEAMCMD_HOME/linux32/steamclient.so
UNTURNED_API=$UNTURNED_HOME/Unturned_Data/Plugins/x86/steamclient.so
printf "Steam: "
if [ -f $STEAMCMD_API ]; then
if diff $STEAMCMD_API $UNTURNED_API >/dev/null ; then
printf "${GREEN}UP TO DATE${NC}\n\n"
else
cp $STEAMCMD_API $UNTURNED_API
printf "${YELLLOW}UPDATING${NC}\n\n"
fi
else
printf "${RED}NOT FOUND${NC}\n\n"
fi
cd $UNTURNED_HOME
if [ -f RocketLauncher.exe ]; then
ulimit -n 2048
mono RocketLauncher.exe $INSTANCE_NAME
else
echo "RocketLauncher not found."
fi
问题是,如果我从./check.sh
执行/home/steam
它可以正常工作。坏消息是当我重新启动VPS时,@reboot
对我不起作用。
screen -list
不会抛出任何东西。
我尝试了多项但没有用,我改变的最后一件事就是在-d
命令中添加screen
参数,这样服务器就不需要terminal
来写下初创公司。
我不确定这里可以做多少让@reboot
按预期工作。
如何让我的脚本在启动时运行? CRON
@reboot
{/ 1}}
提前致谢。
答案 0 :(得分:4)
查看systemd.service联机帮助页。它描述了如何配置systemd来管理服务。我相信您会在/usr/lib/systemd/system
或类似路径中找到适合您系统的示例。
在您的情况下,该服务看起来有点像这样:
[Unit]
Description=Unturned Game Server
[Install]
WantedBy=multi-user.target
[Service]
ExecStart=/bin/bash /home/steam/start.sh
Type=simple
User=steam
Group=steam
WorkingDirectory=/home/steam
Restart=on-failure
将其放入档案/etc/systemd/system/unturned.service
。然后运行systemctl daemon-reload
(一次,每次更改unturned.service
以告诉systemd重新读取配置)和systemctl start unturned.service
以启动游戏服务器。
如果按预期工作,您可以使用systemctl enable unturned.service
确保它在启动时启动。
关于所用选项的一些注释:
steam
运行,请进行相应的编辑。WantedBy
部分中的Install
告诉systemd当使用systemctl enable启用它时,“target”(请参阅man systemd.target)将服务拉入。Restart
定义systemd将在何种情况下自动重启服务。还有更多与重启相关的选项,您可能想要也可能不想更改;请参阅systemd.service手册页。答案 1 :(得分:0)
尝试man 5 crontab
。如果您的crontab支持,则应该看到@ reboot,@ yearly,@ monthly,。,
然后尝试多睡一会可能会有所帮助。
@reboot sleep 60;/root/s3-mount.sh