Crontab 定时任务

crontab 是 Linux 系统中一个非常经典且强大的定时任务调度器

它的名字来源于 Cron Table(Cron 表格)。你可以把它想象成一个自动执行任务的闹钟。只要你按照特定的格式把任务写在“表格”里,系统就会在指定的时间自动去执行这些命令,不需要人工干预。


1. 它有什么用?

在服务器管理和程序开发中,它通常用于处理“重复性”的工作:

  • 备份数据:每晚 3 点备份 SQLite 数据库。

  • 清理日志:每周日清理一次过期的日志文件。

  • 自动重启:如果某个程序容易内存溢出,可以每天凌晨强制重启它。

  • 定时检测:每 5 分钟检查一次订阅授权是否到期。


2. crontab 的时间格式

当你输入 crontab -e 时,每一行代表一个任务,格式如下:

* * * * * 命令

这 5 个星号分别代表:

  1. 分钟 (0-59)

  2. 小时 (0-23)

  3. 日期 (1-31)

  4. 月份 (1-12)

  5. 星期 (0-7,0 和 7 都代表周日)


3. 举个例子

假设你写好了一个 Go 程序,路径在 /root/myapp/main,你希望每天凌晨 2:30 运行一次这个程序,并把运行结果记录到一个日志文件里。

你应该在 crontab -e 弹出的编辑器里添加这一行:

Bash

30 2 * * * /root/myapp/main >> /root/myapp/cron_log.log 2>&1

拆解这个命令:

  • 30 2 * * *:表示 2 点 30 分,后面三个星号表示每天、每月、每周。

  • /root/myapp/main:这是你的 Go 程序绝对路径。

  • >> /root/myapp/cron_log.log:将正常的运行输出“追加”到日志文件里。

  • 2>&1:把错误信息也一起写进这个日志(这样报错了你也能看到原因)。


4. 常用操作命令总结

  • crontab -e:编辑定时任务(Edit)。

  • crontab -l:列出当前所有的定时任务(List)。

  • crontab -r:删除所有的定时任务(Remove,慎用!)。

5. 针对你目前的情况

既然你刚才发现磁盘空间快满了(特别是 /var/log/journal 占了 3G),你可以写一个简单的定时任务,让它每周一凌晨自动清理一次系统日志:

Bash

0 0 * * 1 journalctl --vacuum-size=200M

这样你就再也不用担心系统日志把 30GB 的硬盘撑爆了。

你想给你的 Go 程序设置一个什么样的自动化任务?比如定时检测订阅到期?