crontab
是 Unix/Linux 系统中的一个工具,用于执行计划任务。用户可以通过 crontab
来设置周期性运行的命令或脚本。这些任务可以是定期备份、系统监控、日志轮转等。
Crontab 的配置文件由一系列字段组成,每个字段代表时间的不同部分。以下是标准的 crontab 时间字段格式:
* * * * * command_to_be_executed
- - - - -
| | | | |
| | | | +----- 星期几 (0 - 7) (星期天为0或7)
| | | +------- 月份 (1 - 12)
| | +--------- 日期 (1 - 31)
| +----------- 小时 (0 - 23)
+------------- 分钟 (0 - 59)
例如:
30 4 * * * /backup.sh
表示每天凌晨4点30分执行 /backup.sh
脚本。
查看当前用户的 crontab 配置
crontab -l
编辑当前用户的 crontab 配置
crontab -e
删除当前用户的 crontab 配置
crontab -r
列出所有用户的 crontab 配置(需要 root 权限)
ls /var/spool/cron/
*
):表示任意值。例如,*
在分钟字段中表示每分钟。,
):用于分隔多个值。例如,1,15
表示第1分钟和第15分钟。-
):用于定义一个范围。例如,1-5
表示从1到5。/
):用于指定步长。例如,*/10
表示每隔10分钟。创建一个简单的脚本
创建一个名为 test.sh
的脚本,并赋予可执行权限:
echo "echo 'Hello World' >> /tmp/output.txt" > test.sh
chmod +x test.sh
编辑 crontab 文件
使用 crontab -e
编辑当前用户的 crontab 文件,添加以下内容:
*/1 * * * * /path/to/test.sh
这表示每分钟执行一次 test.sh
脚本。
检查输出
查看 /tmp/output.txt
文件,确保每分钟都追加了一行 Hello World
。
环境变量问题
在 crontab 中运行的脚本可能会因为环境变量不同而失败。可以在脚本开头显式声明所需的环境变量,或者在 crontab 文件中定义环境变量。例如:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
日志记录
可以将 crontab 的输出重定向到日志文件以便调试:
*/1 * * * * /path/to/test.sh >> /var/log/cron.log 2>&1
系统级 crontab
系统级 crontab 文件通常位于 /etc/crontab
或 /etc/cron.d/
目录下。这些文件允许指定用户来运行任务。