Linux 的 crond
服务本身不直接支持复杂的条件执行语法,但可以通过以下几种方式实现条件执行的效果:
最常见的方法是在被调用的脚本中实现条件逻辑:
#!/bin/bash
# 检查条件
if [ 条件 ]; then
# 执行任务
fi
在 crontab 中可以使用 shell 的逻辑操作符:
* * * * * [ 条件 ] && 命令
* * * * * [ 条件 ] || 命令
* * * * * [ -f /path/to/file ] && command
* * * * * [ $(date +\%H) -eq 12 ] && command
对于简单的时间条件,可以使用 cron 的特殊字符串:
- @reboot
- 系统启动时执行
- @yearly
- 每年一次
- @monthly
- 每月一次
- @weekly
- 每周一次
- @daily
- 每天一次
- @hourly
- 每小时一次
anacron 可以确保在系统启动后执行错过执行的任务。
* * * * * [ -f /tmp/flag ] && /path/to/script.sh
* 9-17 * * * [ $(date +\%H\%M) -ge 0930 ] && command
* * * * * who | grep -q username && command
\%
虽然crond本身不支持高级的条件语法,但通过这些方法可以实现大多数条件执行的需求。