‘壹’ linux下的定时器,怎么用。
时事件,void(*handle)(union sigval v)参数就是处理事件的函数指针。
int omsSetTimer(timer_t *tId,int value,int interval)就是设置定时器。
按你说的,如果要同时起多个定时器,需要定义一个数组timer_t tm[n];int it[n];tm就是定时器结构,it用来记录对应的定时器是否已经使用,使用中的就是1,没用的就是0;
主进程消息来了就从it找一个没用的好镇来omsSetTimer,如果收到终止消息,那omsSetTimer 定时时间为0
int omsTimer(timer_t *tId,int iValue,int iSeconds ,void(*handle)(union sigval v),void * param)
{
struct sigevent se;
struct itimerspec ts;
memset (&se, 0, sizeof (se));
se.sigev_notify = SIGEV_THREAD;
se.sigev_notify_function = handle;
se.sigev_value.sival_ptr = param;
if (timer_create (CLOCK_REALTIME, &se, tId) < 0)
{
return -1;
}
ts.it_value.tv_sec = iValue;
// ts.it_value.tv_sec =3;
//ts.it_value.tv_nsec = (long)(iValue % 1000) * (1000000L);
ts.it_value.tv_nsec = 0;
ts.it_interval.tv_sec = iSeconds;
//ts.it_interval.tv_nsec = (long)(iSeconds % 1000) * (1000000L);
ts.it_interval.tv_nsec = 0;
if (timer_settime(*tId, TIMER_ABSTIME, &ts, NULL) < 0)
{
return -1;
}
return 0;
}
int omsSetTimer(timer_t *tId,int value,int interval)
{
struct itimerspec ts;
ts.it_value.tv_sec =value;
/高袜郑/戚颂ts.it_value.tv_nsec = (long)(value % 1000) * (1000000L);
ts.it_value.tv_nsec = 0;
ts.it_interval.tv_sec = interval;
//ts.it_interval.tv_nsec = (long)(interval % 1000) * (1000000L);
ts.it_interval.tv_nsec = 0;
if (timer_settime(*tId, TIMER_ABSTIME, &ts, NULL) < 0)
{
return -1;
}
return 0;
}
另外,团IDC网上有许多产品团购,便宜有口碑
‘贰’ Linux下定时任务(系统任务调度、用户任务调度)crontab使用详解
crond是Linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,在CentOS Linux release 7.2.1511中默认是开机启动的,大家可以使用命令:systemctl status crond进行查看。 crond进程定期(每分钟)检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。用户在cron表
(也被称为crontab文件)指定了定时任务,crontab也就是我们常见的定时任务设置命令。Linux下的任务调度分为两类,系统任务调度和用户任务调度。
系统任务调度 :系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。/etc/crontab文件就是系统任务调度的配置文件。
用户任务调度 :用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在/var/spool/cron目录中。其文件名与用户名一致,使用者权限文件如下:
通过以上帮助信息,我们可以知道crond是执行任务计划的一个守护进程。在使用crontab之前我们可以根据帮助信息来设置相关选项,一般情况下我们都使用默认值。
1.建立演示账号crontab。
2.星号(*)使用举例。
以上例子中完整演示了crontab从建立到执行的过程。“5 0 * * * echo "GeekDevOps"”表示在每天00:05执行命令:echo "GeekDevOps"。后面的星号表示只要前面条件满足都执行。例子中的-u选项指定了用户:crontab,-l选项列举了相关用户的用户任务调度,不指定用户则默认为root。执行结果默认写入到用户mail目录下的相关文件中。
3.逗号(,)的使用举例。
现在我们已经把用户切换到crontab下,因此无需额外指定-u选项相关内容。“3 2,6,8 * * *”表示每天的02:03:00、06:03:00、08:03:00分别执行一次命令:ls /usr/local。
4.减号(-)的使用举例。
例子中的“0 2-6 * * 6 df -h /”表示用户crontab在每周六的02:00、03:00、04:00、05:00、06:00执行命令:df -h / 。
5.斜杠(/)的使用举例。
例子中表示每隔2分钟执行一次命令:echo "GeekDevOps">>/root/GeekDevOps.txt。
6.crontab的使用非常简单,很容易理解,只要在取值范围内设置执行的值基本是没有问题的。现在我们要删除已经设置的这些定时任务。
例子中,选项-r表示删除所有定时任务。选项-i表示在删除前进行再次确定,输入y或者Y才能真正删除。
7.备份我们设置的用户任务调度配置文件。
8.系统任务调度的使用举例。
系统任务调度与用户任务调度不一样,需要直接在/etc/crontab里面配置,如果需要指定用户,还需要在执行命令前指定用户名。通过crontab -l 命令是查看不到系统任务调度任务的。
‘叁’ linux定时任务
linux定时任务使用crontab命令
crontab命令说明
crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
语法
crontab(选项)(参数)
选项
-e:编辑该用户的计时器设置;
-l:列出该用户的计时器设置;
-r:删除该用户的计时器设置;
-u<用户名称>:指定要设定计时器的用户名称。
参数
crontab文件:指定包含待执行任务的crontab文件。
知识扩展
Linux下的任务调度分为两类:系统任务调度和用户任务调度。
系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。
/etc/crontab文件包括下面几行:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""HOME=/
# run-parts
51 * * * * root run-parts /etc/cron.hourly
24 7 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
前四行是用来配置crond任务运行的环境变量,第一行SHELL变量指定了系统要使用哪个shell,这里是bash,第二行PATH变量指定了系统执行命令的路径,第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户,第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。
用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在/var/spool/cron目录中。其文件名与用户名一致,使用者权限文件如下:
/etc/cron.deny 该文件中所列用户不允许使用crontab命令
/etc/cron.allow 该文件中所列用户允许使用crontab命令
/var/spool/cron/ 所有用户crontab文件存放的目录,以用户名命名
crontab文件的含义:用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute hour day month week command 顺序:分 时 日 月 周
其中:
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
在以上各个字段中,还可以使用以下特殊字符:
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
crond服务
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
查看crontab服务状态:
service crond status
手动启动crontab服务:
service crond start
查看crontab服务是否已设置为开机启动,执行命令:
ntsysv
加入开机自动启动:
chkconfig –level 35 crond on
‘肆’ linux怎么设置定时任务
在linux系统中我们可以修改定时执行的文件实现定时计划,具体步骤如下。
1、查看定时执行的文件:命令:“crontab -l”,如同ll或者ls一样,显示定时任务列表信息,然后查看定时任务详细信息,定时任务脚本前面的 * * * * *和数字意思解释如下:从左到右,依次是:分、时、日、月、星期。
2、修改定时脚本里面的执行内容,并查看定时脚本执行内容。
3、编辑定时执行计划。这个方式和修改文件类似。使用命令:"crontab -e" ,e表示edit修改的意思。
‘伍’ linux中的hrtimer怎么使用
1.hrtimers - 为高分辨率kernel定时器,可作为超时或纳燃周期性定时器使用
1). hrtimer_init初始化定时器工作模式。
hrtimer_init(&vibe_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
vibe_timer.function = timer_func;
/* 设置定时器的回调函数,定时器到时该函数将被调用 */
static enum hrtimer_restart timer_func(struct hrtimer *timer)
注:该回调函数为原子操作不能被中断
关于Linux命令的介绍,看看《linux就该这洞尺虚么学》,具体关于这一章困李地址3w(dot)linuxprobe/chapter-02(dot)html
2). hrtimer_start的第二个参数用于设置超时参数。
hrtimer_start(&vibe_timer,
ktime_set(value / 1000, (value % 1000) * 1000000),HRTIMER_MODE_REL);
3).int hrtimer_cancel(struct hrtimer *timer);
要取消一个hrtimer,使用hrtimer_cancel:
‘陆’ linux使用cron怎么设置定时任务
确定设置crontab的用户,举例用root执行:
crontab -e
进入编辑模式:
00
00 * * * 执行命令
表示每天00点00分执行命令一次
其他时间设置:
每五分钟执行 */5 * * * *
每小时执行 0 * * * *
每天执行 0 0 * * *
每周执行 0 0 * * 0
每月执行 0 0 1 * *
每年执行 0 0 1 1 *
crontab详解:
1.作用
使用crontab命令可以修改crontab配置文件,然后该配置由cron公用程序在适当的时间执行,该命令使用权限是所有用户。
2.格式
crontab [-u user] {-l | -r | -e}
3.主要参数
-e:执行文字编辑器来设定时程表,内空的文字编辑器是vi
-r:删除目前的时程表
-l列出目前的时程表。
Crontab文件的格式为”M H D
m d cmd”。其中,M代表分钟(0~59),H代表小时(0~23),D代表天(1~31),m代表月(1~12),d代表一星期内的天(0~6,0为星期天)。Cmd表示要运行的程序,它被送入sh执行,这个shell只有USER、HOME、SHELL三个环境变量。
使用cron服务,用server crond status查看cron服务状态,如果没有启动则service
crond start启动它,cron服务是一个定时执行的服务,可以通过crontab命令添加或编辑需要定时执行的任务:
crontab –u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab –l //列出某个用户cron服务的详细内容
crontab –r //删除某个用户的cron服务
crontab –e //编辑某个用户的cron服务
crontab filename //以filename作为crontab的任务列表文件并载入
比如说root查看自己的cron设置:crontab –u root –l
再例如,root想删除fred的cron设置:crontab –u fred –r
在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab –u root –e
进入vi编辑模式,编辑的内容一定要符合下面的格式:
*/1
* * * * ls >>/tmp/ls.txt
编辑/etc/crontab文件,在末尾加上一行:30 5 * * * root init 6这样就将系统配置为每天早上5点30分自动重新启动。
crontab 文件中的行由6个字段组成,不同字段间用空格或tab键分隔。前5个字段指定命令要运行的时间
分钟(0-59)
小时(0-23)
日期(1-31)
月份(1-12)
星期几(0-6,其中0代表星期日,好像7也代表星期日)
第6个字段是一个要在适当时间执行的字符串。
例子:
#MIN HOUR DAY MONTH DAYOFWEEK COMMAND
#每天早上6点10分
10 6 * * * date
#每两个小时
0 */2
* * * date
#晚上11点到早上8点之间每两个小时,早上8点
0 23-7/2,8 * * * date
#每个月的4号和每个礼拜一到礼拜三的早上11点
0 11 4 * 1-3 date
#1月1日早上4点
0 4 1 1 * date
补充:在使用crontab的时候,要特别注意的是运行脚本中能够访问到的环境变量和当前测试环境中环境变量未必一致,一个比较保险的做法是在运行的脚本程序中自行设置环境变量(export)
(1) 先建一个文件crond.txt如下,每天早上5点36分重新启动
36 5 * * * reboot
(2)上传到/opt目录
(3)运行命令
crontab /opt/crond.txt
crontab –l
让配置文件生效:如果让配置文件生效,还得重新启动cron,切记,既然每个用户下的cron配置文件修改后,也要重新启动cron服务器。
在Fedora和Redhat中,我们应该用:
/etc/rc.d/crond restart
如果让crond在开机时运行,应该改变其运行级别:
chkconfig –level 35
crond on
service crond status查看cron服务状态,如果没有启动则service
crond start启动它,cron服务是一个定时执行的服务,可以通过crontab命令添加或者编辑需要定时执行的任务
‘柒’ day17-Linux系统定时任务
周期性的执行任务计划的软件,Linux定时任务软件的常用软件crond
cron是定时任务的软件名
crond是服务进程名,真正实现定时任务服务
crontab命令是用来设置定时任务
01.使用定时软件,可以每天每小时按你的需求重复的执行一项工作
02.类似生活中使用的闹钟,可以自动完成操作命令,定时备份系统数据信岩消绝息。
01.定时任务服务环境准备
a. 启动crond服务
关闭crond服务:systemctl stop crond.service
启动crond服务:systemctl start crond.service
查看crond服务状态:systemctl status crond.service
b.设置开机自启动
开机自启动crond服务:systemctl enable crond.service
开机不启动crond服务:systemctl disable crond.service
02.系统定时任务
a. 系统定时任务周期:
每小时 目录/etc/cron.hourly
每一天 目录/etc/cron.daily
每一周 目录/etc/cron.weekly
每个月 目录/etc/cron.monthly
b. /etc/crontab 系统定时任务的配置文件之一(有记录定时任务格式)
c. 系统定时任务+logrotate命令 完成对日志的切割/日志轮询
/var/log/cron
/var/log/messages
/var/log/secure
02.用户定时任务
用户定时任务查看 crontab -l == cat /var/spool/cron/root
用户定时任务编辑 crontab -e == vim /var/spool/cron/root
定时任务配置文件 /var/spool/cron/root (root文件表示root用户设置的定时任务,文件名是根据用户名设置的)
注:定时任务常见提示信息
a. no crontab for root 当前用户没有编辑定时任务
b. Do you want to retry the same edit 定时任务编辑错误是否继续
03.定时任务编写语法格式:
定时任务常用符号
* 每
/n 每隔
- 连续区间
, 分隔
04.定时任务编写流程
a. 测试定时执行命令(定时任务执行的命令用绝对路径)
b. 编写定时任务信息(先编写注释信息,编写定时任务)
c. 检查定时任务效果:查看定时任务日志(可以桥启临时修改定时任务每分钟执行,最终修改定时任务的时间)
定时任务对%不识别,百分号需要转义\%
尽量使用脚本文件实现
a. 测试定时执行脚本(定时任务执行的脚本利用绝对路径/bin/sh)
b. 编写定时任务信息(先编写注释信粗姿息,编写定时任务 在任务信息后边加上>/dev/null 2>&1 避免产生很多没用的小文件占用磁盘inode)
c. 检查定时任务效果:查看定时任务日志(可以临时修改定时任务每分钟执行,最终修改定时任务的时间)
定时任务编写要领
(1)为定时任务规则加必要的注释
(2)所有的定时任务尽量都以脚本的形式执行
(3)在执行的shell脚本前加上/bin/sh
(4)在定时任务中命令或脚本的结尾加上 >/dev/null 2>&1
(5)在指定用户下执行相关定时任务
(6)生产任务计划程序中不要随意打印输出信息,有输出的想法去掉
(7)定时任务执行的脚本哟啊存放到规范路径下
(8)配置定时任务要规范操作过程,减少出错
(9)定时任务脚本中程序命令及路径尽量用全路径
(10)时间变了%号要用反斜线转义(只有定时任务里时命令时需要)
(11)若脚本中调用了系统环境变量,要重现定义
(12)出错或无法执行,就检查/var/log/cron日志
‘捌’ 有谁会用linux里面的定时器timer_list
这段代码是Linux的一个内核模块程序,timer_list也是Linux内核中的数据结构。模块程序不是以main函数作为入口的。而是以mole_init指定。
mole_init/mole_exit分别用于指定模块的加载和卸载函数。
加载模块(insmod)时,会调用mytimer_init函数。这个函数设置一个定时器,在定时器超时时执行myfunc函数,指定函数参数为“Hello,world!”。
myfunc执行时,会输出“Hello,world!”,mod_timer函数会将定时器重新计时,两秒后到期。
因此整个代码执行起来后的现象就是每两秒输出一次Hello,world!