先唠两句
大家好啊,我是阿垚。
欢迎来到《每日一命令》第09期。
上期聊了scp------安全的远程复制。今天聊一个运维自动化的必备工具:
crontab
你是不是还在每天凌晨手动登录服务器执行脚本?是不是经常忘记备份、忘记清理日志?
让crontab帮你自动完成这些重复性工作。
crontab是什么?
crontab是Linux下的定时任务工具。按照设定的时间周期,自动执行指定的命令或脚本。
一句话:把你想定时做的事情交给系统去做,不用再熬夜。
最常用的5种姿势
1. 编辑当前用户的定时任务
bash
crontab -e
第一次使用时会让你选择编辑器,选nano或vim都可以。
2. 查看当前用户的定时任务
bash
crontab -l
3. 删除所有定时任务
bash
crontab -r
4. 以其他用户身份编辑定时任务
bash
crontab -u username -e
5. 从文件导入定时任务
bash
crontab task.txt
Crontab时间格式详解
bash
* * * * * command_to_execute
│ │ │ │ │
│ │ │ │ └─── 星期几 (0-7, 0和7都代表周日)
│ │ │ └───── 月份 (1-12)
│ │ └─────── 日期 (1-31)
│ └───────── 小时 (0-23)
└─────────── 分钟 (0-59)
常用时间示例:
| 表达式 | 含义 |
|---|---|
0 2 * * * |
每天凌晨2点执行 |
*/5 * * * * |
每5分钟执行一次 |
0 9-18 * * 1-5 |
工作日9点到18点每小时执行 |
0 0 1 * * |
每月1号凌晨执行 |
@reboot |
系统重启后执行一次 |
进阶技巧
日志输出与调试
bash
# 将输出重定向到文件
0 2 * * * /home/user/backup.sh >> /var/log/backup.log 2>&1
# 不产生任何输出
0 2 * * * /home/user/clean.sh > /dev/null 2>&1
确保脚本有执行权限
bash
chmod +x /path/to/script.sh
使用绝对路径
crontab执行时的环境变量与登录shell不同,建议命令和脚本都使用绝对路径。
bash
# 不推荐
0 2 * * * backup.sh
# 推荐
0 2 * * * /home/user/backup.sh
真实场景
场景1:每天凌晨备份数据库
bash
0 3 * * * /usr/bin/mysqldump -u root mydb > /backup/mydb_$(date +\%Y\%m\%d).sql
注意:百分号需要转义为 \%
场景2:每小时清理临时文件
bash
0 * * * * find /tmp -type f -mtime +1 -delete
场景3:每周一早上9点发送报告
bash
0 9 * * 1 /usr/bin/python3 /home/user/send_report.py
场景4:系统重启后启动服务
bash
@reboot /usr/bin/systemctl start myapp
常用参数速查
| 命令 | 含义 |
|---|---|
crontab -e |
编辑定时任务 |
crontab -l |
查看定时任务 |
crontab -r |
删除所有任务 |
crontab -u |
指定用户 |
crontab -i |
删除前确认 |
注意事项
-
脚本中的环境变量(如PATH)与登录shell不同,建议在脚本开头手动设置PATH
-
时间中的百分号需要转义:
\% -
定期检查日志,确认任务是否正常执行
-
避免任务重叠执行,可使用flock文件锁
下期预告
《每日一命令10:systemctl------别再reboot了》
评论区分享你最常用的crontab任务。
------阿垚,一个踩过2万次坑的"老"IT