Crontab 定时任务
crontab 是 Linux 系统中一个非常经典且强大的定时任务调度器。
它的名字来源于 Cron Table(Cron 表格)。你可以把它想象成一个自动执行任务的闹钟。只要你按照特定的格式把任务写在“表格”里,系统就会在指定的时间自动去执行这些命令,不需要人工干预。
1. 它有什么用?
在服务器管理和程序开发中,它通常用于处理“重复性”的工作:
-
备份数据:每晚 3 点备份 SQLite 数据库。
-
清理日志:每周日清理一次过期的日志文件。
-
自动重启:如果某个程序容易内存溢出,可以每天凌晨强制重启它。
-
定时检测:每 5 分钟检查一次订阅授权是否到期。
2. crontab 的时间格式
当你输入 crontab -e 时,每一行代表一个任务,格式如下:
* * * * * 命令
这 5 个星号分别代表:
-
分钟 (0-59)
-
小时 (0-23)
-
日期 (1-31)
-
月份 (1-12)
-
星期 (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 程序设置一个什么样的自动化任务?比如定时检测订阅到期?