crond和corntab都是busybox下的一个工具,crond是一个后台进程,每隔一分钟读取配置文件中的参数,执行对应的动作。crontab是提供的一个命令行,可以对配置文件进行增删改查。
1、openwrt上启动crond进程
crond的启动参数如下:
一般就设置-c指定文件目录,-l日志等级
# crond -h
crond: invalid option -- h
BusyBox v1.22.1 (2022-03-14 17:26:20 CST) multi-call binary.
Usage: crond -fbS -l N -L LOGFILE -c DIR
-f Foreground
-b Background (default)
-S Log to syslog (default)
-l Set log level. 0 is the most verbose, default 8
-L Log to file
-c Working dir
openwrt中还是在/etc/init.d/中有cron启动程序,如下
# cat /etc/init.d/cron
#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2011 OpenWrt.org
START=50
USE_PROCD=1
PROG=/usr/sbin/crond
validate_cron_section() {
uci_validate_section system system "${1}" \
'cronloglevel:uinteger'
}
start_service () {
[ -z "$(ls /etc/crontabs/)" ] && return 1
loglevel=$(uci_get "system.@system[0].cronloglevel")
[ -z "${loglevel}" ] || {
/sbin/validate_data uinteger "${loglevel}"
[ "$?" -eq 0 ] || {
echo "validation failed"
return 1
}
}
mkdir -p /var/spool/cron
ln -s /etc/crontabs /var/spool/cron/ 2>/dev/null
procd_open_instance
procd_set_param command "$PROG" -f -c /etc/crontabs -l ${loglevel:-5}
procd_close_instance
}
service_triggers()
{
procd_add_validation validate_cron_section
}
启动进程如下:
# ps | grep crond
27141 root 1528 S /usr/sbin/crond -f -c /etc/crontabs -l 5
在system模块下可以添加crond启动log的等级,默认是5
# cat /etc/config/system
config system
option zonename 'Asia/Shanghai'
option timezone 'CST-8'
option cronloglevel '4'
2、crontab命令使用
列出当前的默认定时任务列表:
crontab -l
删除当前的默认定时任务列表:
crontab -r
修改当前的默认定时任务列表,其实就是使用vi打开/etc/crontabs/root文件进行编辑
crontab -e
上面的crontab命令其实是个鸡肋,直接用cat/vi查看修改/etc/crontabs/root文件就行了。
3、创建定时任务
计划任务列表的格式:
[minute] [hour] [day of month] [month] [day of week] [program to be run]
其中各个参数的取值范围是:
minute(0-59)
hour(0-23)
day of month(1-31)
month(1-12)
day of week(0-7,0 or 7 is Sun)
每个参数里的取值可以有4种间隔符:
* 表示任意
– 表示范围
, 表示枚举多个值
/ 表示每隔
例如:
周一到周五每天晚上23:30重启系统
30 23 * * 1-5 reboot
每天每隔10分钟执行run.sh脚本
*/10 * * * * date
每天14点-15点,和每天20点到-21点,每个15分钟执行一次run.sh脚本
echo "*/15 14,20 * * * date" >> /etc/crontabs/root
任务添加到/etc/crontabs/root里面之后,要等下一分钟才可以生效到,因为crond进程每隔一分钟才执行一次,如果想马上生效,就重启crond进行/etc/init.d/crond restart
Linux crontab 命令:https://www.runoob.com/linux/linux-comm-crontab.html
网友评论