You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu 22.04.1下Minecraft服务器每日凌晨4点重启的配置方案咨询

Ubuntu 22.04.1下Minecraft服务器每日凌晨4点重启的配置方案咨询

您好!我来帮您梳理这个问题的解决方案:

首先直接回应您的核心疑问:systemd的service配置文件本身不支持直接设置定时重启规则,所以没法在现有的.service文件里添加每日4点重启的配置项。不过有几个实用的替代方案,我给您详细说明:

方案一:使用Cron定时任务(最推荐)

Ubuntu默认自带Cron,这是Linux系统最常用的定时任务工具,配置简单且稳定。

具体操作步骤:

  1. 打开drgadmin用户的crontab配置(因为您的Minecraft服务是用该用户运行的):

    crontab -u drgadmin -e
    

    如果您的服务是系统级的(比如存放在/etc/systemd/system/目录下),也可以编辑root用户的crontab:

    sudo crontab -e
    
  2. 在打开的编辑器中添加一行定时规则,实现每日凌晨4点重启服务:

    # 每日凌晨4点重启Minecraft服务
    0 4 * * * systemctl --user restart minecraft.service
    

    若为系统级服务,将命令修改为:

    0 4 * * * systemctl restart minecraft.service
    

    (注意:这里的minecraft.service要替换成您实际的服务文件名,比如如果服务文件叫mc-server.service,就改成对应的名称)

  3. 保存退出后,Cron会自动加载新的任务配置,无需额外重启服务。

方案二:优化备份逻辑(无需重启服务器)

其实您的核心需求是每日备份,重启服务只是触发备份的方式。如果不想打断玩家游戏体验,可以把备份脚本和服务器启动逻辑分开,直接定时执行备份:

  1. 新建单独的备份脚本daily-backup.bash,提取现有脚本的备份部分:

    #!/bin/bash
    ServerFolder=./paper-1.19.3/
    now=$(date +"%Y-%m-%d")
    
    if [ ! -d "./backups" ]; then
        mkdir "./backups"
    fi
    
    filename="$(basename "$ServerFolder")_$now.tar.gz"
    tar cf - "$ServerFolder" | pv | gzip > "./backups/$filename"
    
    # 保留原有的备份清理规则
    find "./backups" -type f ! -name "$(basename "$ServerFolder")_*-??-01.tar.gz" -mtime +62 -delete
    

    给脚本添加执行权限:

    chmod +x daily-backup.bash
    
  2. 用Cron定时执行这个备份脚本,比如设置为每日凌晨3点(避开玩家高峰):

    0 3 * * * /home/drgadmin/minecraft-server/daily-backup.bash
    

    这样既完成了每日备份,又不会因重启服务器影响玩家。


附您当前的配置参考:

Minecraft服务文件内容:

[Unit]
Description=Minecraft server
After=network.target

[Service]
User=drgadmin
WorkingDirectory=/home/drgadmin/minecraft-server/
ExecStart=bash ./start-server.bash
Restart=on-failure
RestartSec=30s
StartLimitInterval=10m
StartLimitBurst=3

[Install]
WantedBy=multi-user.target

当前start-server.bash脚本内容:

#!/bin/bash

ServerFolder=./paper-1.19.3/

# Current date
now=$(date +"%Y-%m-%d")

# Create backup folder if it doesn't exist
if [ ! -d "./backups" ]; then
mkdir "./backups"
fi

# Create a zip archive of the folder specified in the variable ServerFolder
# the file name is adjusted with the current date
filename="$(basename "$ServerFolder")_$now.tar.gz"
tar cf - "$ServerFolder" | pv | gzip > "./backups/$filename"

# Keep one week of daily backups
# Keep one monthly backup after that time
find "./backups" -type f ! -name "$(basename "$ServerFolder")_*-??-01.tar.gz" -mtime +62 -delete

cd "$ServerFolder"
java -Xms1024M -Xmx1024M -jar ./server.jar nogui

备注:内容来源于stack exchange,提问作者julian bechtold

火山引擎 最新活动