路由联盟

20-Openwrt crond crontab

2022-05-14  本文已影响0人  Creator_Ly

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

上一篇下一篇

猜你喜欢

热点阅读