设置定时任务--crontab
crontab 是 Linux/Unix 系统中用于设置定时任务的工具,可以定期执行脚本或命令。以下是关于如何使用 crontab 定时执行可执行脚本的详细说明:
1. 基本语法
crontab 的定时规则由 5 个时间字段 + 要执行的命令 组成:
bash
| * * * * * /path/to/script.sh |
| | | | | | |
| | | | | +----- 星期几 (0 - 6) (0 表示周日) |
| | | | +------- 月份 (1 - 12) |
| | | +--------- 日期 (1 - 31) |
| | +----------- 小时 (0 - 23) |
| +------------- 分钟 (0 - 59) |
2. 常用时间示例
| 示例 | 说明 |
|---|---|
* * * * * /path/to/script.sh |
每分钟执行一次 |
0 * * * * /path/to/script.sh |
每小时的第 0 分钟执行 |
0 */2 * * * /path/to/script.sh |
每 2 小时执行一次 |
0 3 * * * /path/to/script.sh |
每天凌晨 3 点执行 |
0 0 * * 0 /path/to/script.sh |
每周日午夜执行 |
0 0 1 * * /path/to/script.sh |
每月 1 号午夜执行 |
@daily /path/to/script.sh |
每天执行一次(等价于 0 0 * * *) |
@reboot /path/to/script.sh |
系统启动时执行 |
3. 使用 crontab 设置定时任务
(1) 编辑当前用户的 crontab
bash
| crontab -e |
- 如果是第一次使用,可能会让你选择编辑器(推荐
nano或vim)。 - 在打开的文件中添加定时任务,例如:
bash
0 3 * * * /home/user/backup.sh - 保存并退出(
Ctrl + X→Y→Enter在nano中)。
(2) 查看当前用户的 crontab
bash
| crontab -l |
(3) 删除所有定时任务
bash
| crontab -r |
4. 确保脚本可执行
在 crontab 中运行的脚本必须具有可执行权限:
bash
| chmod +x /path/to/script.sh |
5. 日志与调试
(1) 查看 cron 日志
- Ubuntu/Debian:
bash
grep CRON /var/log/syslog - CentOS/RHEL:
bash
tail -f /var/log/cron
(2) 重定向输出到日志文件
bash
| 0 3 * * * /home/user/backup.sh >> /var/log/backup.log 2>&1 |
>>追加输出到日志文件。2>&1将错误输出也重定向到日志文件。
6. 环境变量问题
cron 默认使用 最小环境变量,可能导致脚本运行失败。解决方法:
(1) 在脚本中设置 PATH
bash
| PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin |
| # 你的脚本内容 |
(2) 在 crontab 中定义变量
bash
| SHELL=/bin/bash |
| PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin |
| 0 3 * * * /home/user/backup.sh |
7. 示例:每天备份 MySQL 数据库
bash
| # backup_mysql.sh |
| mysqldump -u root -pYOUR_PASSWORD dbname > /backups/db_$(date +\%Y\%m\%d).sql |
然后添加到 crontab:
bash
| 0 2 * * * /home/user/backup_mysql.sh >> /var/log/mysql_backup.log 2>&1 |
8. 注意事项
- 脚本中的
date命令:在cron中,%需要转义(\%)。 - 权限问题:确保
cron有权限执行脚本。 - 避免相对路径:在脚本中使用绝对路径(如
/home/user/file.txt而不是~/file.txt)。 - 测试脚本:先手动运行脚本,确保它能正常工作。
总结
| 操作 | 命令 |
|---|---|
编辑 crontab |
crontab -e |
查看 crontab |
crontab -l |
| 删除所有任务 | crontab -r |
查看 cron 日志 |
grep CRON /var/log/syslog |
| 设置脚本可执行 | chmod +x script.sh |
通过 crontab,你可以轻松实现 定时备份、日志清理、数据同步 等自动化任务。
浙公网安备 33010602011771号