Crontab 是 Unix 系统中用于计划任务的强大工具,但默认仅支持按分钟执行。本文将介绍如何配置 crontab 按秒执行任务。
任务说明
实现 crontab 按秒执行指定命令,适用于需要高频触发的自动化任务。
准备工作
确保您的系统使用的是支持秒级触发的 crontab。大多数现代 Linux 发行版(如 Ubuntu 20.04+)默认支持秒级计划。
操作步骤
1. 查看当前 crontab 配置
使用以下命令查看当前用户的 crontab 配置:
crontab -l
如果输出为空,说明没有配置任何计划任务。
2. 编辑 crontab 配置
使用以下命令编辑 crontab 文件:
crontab -e
系统将打开默认编辑器(通常是 vim 或 nano)。
3. 配置秒级任务
crontab 使用以下格式定义任务:
- 秒
- 分钟
- 小时
- 日期(月)
- 月份
- 星期几
- 要执行的命令
要按秒执行,将秒字段设置为星号(*):
*/1 * * * * /path/to/command
示例:每秒执行 /usr/bin/hello 命令:
*/1 * * * * /usr/bin/hello
4. 特殊秒值配置
除了星号,还可以使用具体秒数或范围:
- 每 5 秒执行:
*/5 * * * * /path/to/command
- 在秒 10-20 执行:
10-20 * * * * /path/to/command
- 在秒 30、50 执行:
30,50 * * * * /path/to/command
5. 注意事项
秒级任务可能导致系统负载增加,特别是当任务需要执行较长时间的操作时。建议:
- 任务执行时间尽量短(建议 < 1 秒)
- 使用 sleep 命令控制频率:
/path/to/command; sleep 0.5
- 避免在同一 crontab 中设置过多高频任务
验证配置
保存并退出编辑器后,crontab 将自动生效。使用以下命令查看已应用的配置:
crontab -l
验证任务是否按预期执行,可以使用 strace 或 dmesg 命令追踪系统调用。
高级技巧
1. 使用环境变量
crontab 支持使用环境变量,可以在命令前添加 export:
*/1 * * * * export VAR=value; /path/to/command
2. 日志记录
建议将任务输出重定向到日志文件:
*/1 * * * * /path/to/command >> /var/log/mytask.log 2>&1
3. 使用 systemd 服务
对于需要持续运行的高频任务,推荐使用 systemd 服务代替 crontab:
[Unit]
Description=My second-level task
[Service]
ExecStart=/usr/bin/mytask
Restart=always
RestartSec=1
[Install]
WantedBy=multi-user.target
然后使用以下命令启动和启用服务:
systemctl start mytask.service
systemctl enable mytask.service