openwrt定时任务 2021-10-08

1、初识

Ubuntu系统下,/etc/crontab文件中记录着定时任务的分配。 

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
​
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
​
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
//代表:每小时执行一次 /etc/cron.hourly 文件
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
//代表:每天执行一次 /etc/cron.daily 文件
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
//代表:每周执行一次 /etc/cron.weekly 文件
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
//代表:每月执行一次 /etc/cron.monthly 文件
#

星号(*):代表所有可能的值,如month字段为星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”

中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。

在openwrt系统下的定时任务需要自己手动添加。

添加内容以及添加内容的含义如下:

1.认识脚本

位置:绝对路径下的位置——如果,使用相对路径的话,可能会造成后续执行任务时的混乱。

* */1 * * * /myapp/5.sh  //后半部分代表了需要执行的脚本的绝对位置
* */1 * * * /myapp/2.sh  //前半部分代表了定时任务执行的频率
​
//代表每分钟执行一次根目录下的1.sh的文件
* * * * * /1.sh
*/1 * * * * /1.sh
​
*/6 * * * * /1.sh    //代表每六分钟执行一次定时任务
​
* * */1 * * /2.sh        // 代表每月一号执行一次定时任务
​
12 */3 * * * /3.sh       //代表每过3个小时候的第12分钟执行一次定时任务
​
25 6 * * 1-5 /4.sh       //工作日期间(周一至周五),每天早上6点25分执行一次定时任务
​
0 0 4,12,26 * * /4.sh   //每月的第4、12、26日,晚上12点执行一次

2.日志——定时任务查看

openwrt中,使用logread进行查看

logread -e cron

读取cron软件执行的记录,不是所有信息都会被记录到日志里的,在/etc/config/system修改 cronloglevel的值修改,信息等级。默认为5,0将打印所有调试消息,8将记录命令执行,9或更高版本将仅记录错误消息。

3.定时重启

用来对付一些系统运行时出现的难题(比如内存泄露、性能下降、……)的法宝就是每晚定期重启。 有可能会出现反复重启问题: 一种解决cron定时重启任务的怪圈的办法是在重启前,推迟一会儿重启,同时主动用touch命令去修改/etc下的任意文件。

# 每天上午4:30执行重启
# 注意: 为了防止循环重启的怪圈,需要推迟70秒钟执行重启
# 在/etc目录下touch修改一个文件的时间属性,并且设置
# 为上午4:31然后再执行cron的重启任务.
30 4 * * * sleep 70 && touch /etc/banner && reboot

注意:如果出现脚本或者命令未执行,情况可能是环境变量问题。

在crontab文件中定义多个调度任务是,需要特别注意的一个问题是环境变量的设置,因为我们手动执行某个脚本时,是在当前shell环境下进行的,程序能够找到环境变量,而系统自动执行任务调度的时候,除了默认的环境外,是不会加载任何其他环境变量的。因此就需要在crontab文件中执行任务运行所需的所有环境变量。

不要假定cron知道所需要的特殊环境,它其实并不知道,所以用户需要在shell脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。以下三点需要注意:

1、脚本中涉及文件路径时写绝对路径;

2、脚本执行要用到环境变量时,通过source命令显式引入,例如:

#!/bin/sh
source /etc/profile

3、当手动执行脚本没问题,但是crontab不执行的时候,可以尝试在crontab中直接引入环境变量解决问题,例如:

* * * * * . /etc/profile; /xx/xx/test.sh

2.操作执行

1.文件修改

操作文件文件修改内容文件修改作用
/etc/crontabs/root* */1 * * * /myapp/5.sh在文件夹下新建文件,用于定时任务的设置
/myapp/5.shecho 'hello world.' >> 2.txt写入需要执行的定时任务,示例文件中的意思是,输出“hello world.”,并且重定向到根目录下的2.txt文件中
shell脚本/etc/init.d/crond status启动定时任务
shell脚本/etc/init.d/crond enable使能定时任务
shell脚本/etc/init.d/crond restart重启定时任务

2.定时任务查看

tail -f 2.txt

动态查看文件内容,定时任务为每分钟写入2.txt中一句hello world.

3.定时任务执行

如果遇到不能执行的定时任务,可以尝试修改环境变量或者使用

/etc/init.d/crond enable
/etc/init.d/crond restart

重启定时任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值