shell 脚本未使用 cron 选项卡运行屏幕会话

shell 脚本未使用 cron 选项卡运行屏幕会话

我正在 Almalinux VPS 上为我的孩子运行 Minecraft Bedrock 服务器。它不完全受支持,但可以运行。它每天大约关闭两次。我正在尝试自动重新启动服务器。我有一个每分钟运行一次的 cron 作业,旨在重新启动服务器。如果我从终端执行,则重新启动的命令行可以工作,但不能从 crontab 执行。回显消息通过电子邮件发送给我,因此脚本本身正在执行。我已经尝试了 screen 命令的多次迭代,包括写入日志文件,但该文件未创建。

我的 crontab 条目:

* * * * * root /bin/bash /home/mcserver/minecraft_bedrock/restart.sh

我的文件 restart.sh:

#!/bin/bash
ps_out=`ps -ef | grep bedrock_server | grep -v 'grep' | grep -v $0`
result=$(echo $ps_out | grep bedrock_server)
if [[ "$result" == "" ]]; then
    echo "attempting restart"
    screen -d -m /home/mcserver/minecraft_bedrock/bedrock_server 
fi

我感谢任何正确方向的指导!

编辑:在尝试了更多的事情之后,我能够让我的脚本正常工作。我不会自己回答这个问题,因为我认为有些事情我不明白,我想将答案奖励给解释如何使用屏幕或为什么它不起作用的用户。在下面的代码(工作)中,我注释掉了我尝试过但不起作用的内容(使用 screen 和 tmux)。我只是尝试执行启动文件 ./bedrock_server ,但我之前收到错误告诉我需要使用终端,这就是导致我开始使用 screen 的原因。根据我最近的错误,我确定需要将目录更改为绝对目录,然后执行./bedrock_server。下面是工作代码:

#!/bin/bash
ps_out=`ps -ef | grep bedrock_server | grep -v 'grep' | grep -v $0`
result=$(echo $ps_out | grep bedrock_server)
if [[ "$result" == "" ]]; then
    # screen -d -m /home/mcserver/minecraft_bedrock/bedrock_server
    #tmux new-session -d -s mc_session '/home/mcserver/minecraft_bedrock/bedrock_server'
    cd /home/mcserver/minecraft_bedrock/
    ./bedrock_server
fi

相关内容