微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux-@reboot在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

问题是,如果我从/ home / steam执行./check.sh,它会正常工作.坏消息是,当我重新启动VPS时,@ reboot对我不起作用.

如果重新启动,screen -list不会抛出任何东西.

我已经尝试了多种方法,但是没有用,我改变的最后一件事是在屏幕命令中添加-d参数,因此服务器不需要终端来记下启动程序.

我不确定在这里可以做多少工作才能使@reboot正常工作.

如何使我的脚本在启动时运行? CRON的@reboot还有其他选择吗?

提前致谢.

解决方法:

看一下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,请进行适当的编辑.
>在“安装”部分中的WantedBy告诉systemd在使用systemctl enable启用服务时将哪个“目标”(请参见man systemd.target)拉入服务.
>重新启动定义systemd在哪种情况下将自动重新启动服务.还有更多与重启相关的选项,您可能会想要更改,也可能不想更改.请参见systemd.service手册页.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐