Ubuntu 22.04.1下Minecraft服务器每日凌晨4点重启的配置方案咨询
Ubuntu 22.04.1下Minecraft服务器每日凌晨4点重启的配置方案咨询
您好!我来帮您梳理这个问题的解决方案:
首先直接回应您的核心疑问:systemd的service配置文件本身不支持直接设置定时重启规则,所以没法在现有的.service文件里添加每日4点重启的配置项。不过有几个实用的替代方案,我给您详细说明:
方案一:使用Cron定时任务(最推荐)
Ubuntu默认自带Cron,这是Linux系统最常用的定时任务工具,配置简单且稳定。
具体操作步骤:
打开drgadmin用户的crontab配置(因为您的Minecraft服务是用该用户运行的):
crontab -u drgadmin -e如果您的服务是系统级的(比如存放在
/etc/systemd/system/目录下),也可以编辑root用户的crontab:sudo crontab -e在打开的编辑器中添加一行定时规则,实现每日凌晨4点重启服务:
# 每日凌晨4点重启Minecraft服务 0 4 * * * systemctl --user restart minecraft.service若为系统级服务,将命令修改为:
0 4 * * * systemctl restart minecraft.service(注意:这里的
minecraft.service要替换成您实际的服务文件名,比如如果服务文件叫mc-server.service,就改成对应的名称)保存退出后,Cron会自动加载新的任务配置,无需额外重启服务。
方案二:优化备份逻辑(无需重启服务器)
其实您的核心需求是每日备份,重启服务只是触发备份的方式。如果不想打断玩家游戏体验,可以把备份脚本和服务器启动逻辑分开,直接定时执行备份:
新建单独的备份脚本
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用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




