linux - @reboot 在 CRON 中不起作用

标签 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。它用于启动 Unturned 游戏服务器。我不认为这个脚本很重要,但我想我应该给你看。

#!/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 不会抛出任何东西。

我已经尝试了很多东西但没有用,我最后改变的是在 screen 命令中添加 -d 参数,这样服务器就不需要一个终端来记录启动。

我不确定在这里可以做多少工作才能使 @reboot 按预期工作。

如何让我的脚本在启动时运行? CRON@reboot 是否还有其他替代方案?

提前致谢。

最佳答案

试试 man 5 crontab。如果你的 crontab 支持,你应该看到@reboot、@yearly、@monthly、.、、、

然后尝试稍微睡一会儿可能会有帮助。

@reboot sleep 60;/root/s3-mount.sh

关于linux - @reboot 在 CRON 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38465751/

相关文章:

git - 如何将 "git ls"文件标记为 git 为 "deleted by us"

c - 该命令在 C 中有效吗?

python - 使用gunicorn运行app报错

linux - 制作 bash 脚本以接受来自文件的输入或管道输出

linux - 在 SLURM sbatch 脚本中使用 Bash 变量

c++ - CMake : External project remote URL not working

bash - 如何中断或消除 inotifywait 循环?

bash - Ctrl-C 并不总是终止 shell 脚本

bash - 无法运行 tar 命令 - 无效选项 -- '▒'

linux - 通过shell脚本编辑一个js文件