跳到主要内容
← 指南列表

在指定时间自动执行(cron)

这里介绍如何像“每天凌晨 4 点备份”“每 10 分钟检查状态”“服务器启动时运行机器人”这样,在指定的时间自动执行命令。以 Ubuntu、Debian 为准。

先将服务器时间设为韩国时间

cron 按照服务器的时区运行。如果服务器设置为 UTC(比韩国慢 9 小时),“凌晨 4 点”就会变成韩国时间下午 1 点。

timedatectl                                # 查看 Time zone 行
sudo timedatectl set-timezone Asia/Seoul   # 改为韩国时间
sudo systemctl restart cron                # 重启 cron,使其使用更改后的时区

打开 crontab

crontab -e

首次运行时会提示选择编辑器,选择 nano(通常是 1 号)会比较简单。在最下方逐行添加要定时执行的内容,然后按 Ctrl + O、Enter、Ctrl + X 保存并退出。

时间的写法

分 时 日 月 星期 要执行的命令
写法含义
0 4 * * *每天凌晨 4 点
*/10 * * * *每 10 分钟
0 */6 * * *每 6 小时(0 点、6 点、12 点、18 点)
30 9 * * 1每周一上午 9 点 30 分
0 0 1 * *每月 1 日零点
@reboot服务器启动时执行一次

如果搞不清楚,可以在 crontab.guru 网站上输入试试,它会用文字说明何时执行。

示例

# 每天凌晨 5 点重启用 pm2 运行的机器人
0 5 * * * /usr/bin/pm2 restart my-bot >> /home/username/cron.log 2>&1

# 服务器启动时运行自己的脚本
@reboot /home/username/start.sh >> /home/username/cron.log 2>&1

关于定时备份,请参阅备份服务器数据中的“每天自动备份”。

必须遵守的事项

  1. 命令和文件要写完整路径。cron 的环境与平时的终端不同,只写 pm2、node 的话,很多时候会找不到。完整路径可以用 which pm2、which node 查看。
  2. 将结果记录到日志文件。在行尾加上 >> /home/username/cron.log 2>&1,失败时就可以看到原因。
  3. 给脚本赋予执行权限。chmod +x start.sh
  4. 命令中的 % 要写成 \%。在 cron 中,% 会被解释为换行。(例如:$(date +\%F))
  5. 需要管理员权限的任务(如重启服务器等)要在 sudo crontab -e 中注册。

确认是否注册成功

crontab -l                              # 查看已注册的列表
journalctl -u cron --since today        # 今天的 cron 执行记录

如果是 Windows 服务器

在 Windows 中,“任务计划程序”起到同样的作用。请参阅在 Windows 服务器上自动运行程序。

如果问题仍未解决,请在 Discord 提交工单。