@reboot在CRON中不起作用

时间:2016-07-19 18:16:32

标签: linux bash shell ubuntu cron

我正在尝试在我的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}}

还有其他替代方法吗?

提前致谢。

2 个答案:

答案 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确保它在启动时启动。

关于所用选项的一些注释:

  • 如果start.sh不应作为用户/组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