设置定时任务--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
#!/bin/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
#!/bin/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. 注意事项

  1. 脚本中的 date 命令:在 cron 中,% 需要转义(\%)。
  2. 权限问题:确保 cron 有权限执行脚本。
  3. 避免相对路径:在脚本中使用绝对路径(如 /home/user/file.txt 而不是 ~/file.txt)。
  4. 测试脚本:先手动运行脚本,确保它能正常工作。

总结

操作命令
编辑 crontab crontab -e
查看 crontab crontab -l
删除所有任务 crontab -r
查看 cron 日志 grep CRON /var/log/syslog
设置脚本可执行 chmod +x script.sh

通过 crontab,你可以轻松实现 定时备份、日志清理、数据同步 等自动化任务。

posted @ 2025-07-24 17:30  Yu-potato  阅读(76)  评论(0)    收藏  举报