Linux任务计划和周期性任务执行

Linux任务计划和周期性任务执行,第1张

常用选项:

-l 查看作业队列,相当于atq

-f 从某个指定文件文件中读取作业任务,不通过交互式输入。

-d 删除指定的作业任务,相当于atrm。

-c 查看指定作业具体内容。

-q QUEUE指明队列。

TIME时间格式有:

HH:MM 小时:分钟 例如04:00

HH:MM YYYY-MM-DD 小时:分钟 年-月-日 例如15:00 2017-11-25

HH:MM[am|pm] [Month] [Date] 例如:04pm July 30

HH:MM[am|pm] + number [minutes|hours|days|weeks]在某个时间点再加几个时间后执行

例如:now + 5minutes 5分钟后执行

04pm + days三天后下午4点执行

[root@dxlcentOS ~]# at 15:55 2017-11-25 在15点55分执行:切换到tmp目录,执行ls命令

at> cd /tmp

at> ls

at> <EOT>

job 3 at Sat Nov 25 15:55:00 2017

注意:输入结束后按ctrl+d,任务输入结束at> <EOT>,执行结果屏幕不会显示,会以邮件形式发送到邮箱。要是没有mail命令,进行yum -y install mailx安装。

执行周期性任务要确保crond守护进程在运行。

执行pstree,要是crond运行起来可以看到。

或者执行:~]# systemctl status crond (centos7)

Active: active (running)

centos6:~]# service crond status

is running

有时候为了安全起见,可以将不允许某些用户执行周期性任务的用户名添加到/etc/crondeny文件里面即可。

cron任务分类:分系统cron任务和用户cron任务

总结:1cron周期任务最小时间单位是分钟。

2定义COMMAND时,如果命令需要用到%,需要对其转义;但放置于单引号中的%不用转义亦可。

3某任务在指定的时间因关机未能执行,下次开机不会自动执行。

4当修改之前定好的任务或新增循环任务时最好执行一下systemctl restart crond。

5如果是系统管理使用的循环任务最好写入/etc/crontab。

6避免系统资源分配不均,周与日月不可以同时并存。

cron循环任务设定后,要是服务器因意外关机,那么在停机期间,cron设定的循环任务是不会运行的,当服务器开机后,也不会执行过去到达时间点的循环任务,只能等待下个时间点到来才执行。要想重新执行,anacron就可以解决这个问题。

anacron 是一个程序不是一个服务,当centos进入crontab排程时,anacron 会主动每一小时运行一次。

这个是windows里面常用来计算程序运行时间的函数;

DWORD dwStart = GetTickCount();

//这里运行你的程序代码

DWORD dwEnd = GetTickCount();

则(dwEnd-dwStart)就是你的程序运行时间, 以毫秒为单位

这个函数只精确到55ms,1个tick就是55ms。

2

timeGetTime()基本等于GetTickCount(),但是精度更高

DWORD dwStart = timeGetTime();

//这里运行你的程序代码

DWORD dwEnd = timeGetTime();

则(dwEnd-dwStart)就是你的程序运行时间, 以毫秒为单位

虽然返回的值单位应该是ms,但传说精度只有10ms。

3

用clock()函数,得到系统启动以后的毫秒级时间,然后除以CLOCKS_PER_SEC,就可以换成“秒”,标准c函数。

clock_t clock ( void );

#include <timeh>

clock_t t = clock();

long sec = t / CLOCKS_PER_SEC;

他是记录时钟周期的,实现看来不会很精确,需要试验验证;

4

#include<iostream>

#include<ctime>

using namespace std;

int main()

{

time_t begin,end;

begin=clock();

//这里加上你的代码

end=clock();

cout<<"runtime: "<<double(end-begin)/CLOCKS_PER_SEC<<endl;

}

5

unix时间相关,也是标准库的

这些在<timeh>

1timegm函数只是将struct tm结构转成time_t结构,不使用时区信息;

time_t timegm(struct tm tm);

2mktime使用时区信息

time_t mktime(struct tm tm);

timelocal 函数是GNU扩展的与posix函数mktime相当

time_t timelocal (struct tm tm);

3gmtime函数只是将time_t结构转成struct tm结构,不使用时区信息;

struct tm gmtime(const time_t clock);

4localtime使用时区信息

struct tm localtime(const time_t clock);

1time获取时间,stime设置时间

time_t t;

t = time(&t);

2stime其参数应该是GMT时间,根据本地时区设置为本地时间;

int stime(time_t tp)

3UTC=true 表示采用夏时制;

4文件的修改时间等信息全部采用GMT时间存放,不同的系统在得到修改时间后通过localtime转换成本地时间;

5设置时区推荐使用setup来设置;

6设置时区也可以先更变/etc/sysconfig/clock中的设置 再将ln -fs /usr/share/zoneinfo/xxxx/xxx /etc/localtime 才能重效

time_t只能表示68年的范围,即mktime只能返回1970-2038这一段范围的time_t

看看你的系统是否有time_t64,它能表示更大的时间范围

Window里面的一些不一样的

CTime MFC类,好像就是把timeh封了个类,没扩展

CTime t = GetCurrentTime();

SYSTEMTIME 结构包含毫秒信息

typedef struct _SYSTEMTIME {

WORD wYear;

WORD wMonth;

WORD wDayOfWeek;

WORD wDay;

WORD wHour;

WORD wMinute;

WORD wSecond;

WORD wMilliseconds;

} SYSTEMTIME, PSYSTEMTIME;

SYSTEMTIME t1;

GetSystemTime(&t1)

CTime curTime(t1);

WORD ms = t1wMilliseconds;

SYSTEMTIME sysTm;

::GetLocalTime(&sysTm);

在timeh中的_strtime() //只能在windows中用

char t[11];

_strtime(t);

puts(t);

6

下面是转的一个用汇编的精确计时方法

---------------------------------------------------------------------------------------

如何获得程序或者一段代码运行的时间?你可能说有专门的程序测试工具,确实,不过你也可以在程序中嵌入汇编代码来实现。

在Pentium的指令系统中有一条指令可以获得CPU内部64位计数器的值,我们可以通过代码两次获取该计数器的值而获得程序或代码运行的时钟周期数,进而通过你的cpu的频率算出一个时钟周期的时间,从而算出程序运行的确切时间。

我们通过指令TDSIC来获得cpu内部计数器的值,指令TDSIC返回值放在EDX:EAX中,其中EDX中存放64位寄存器中高32位的值,EAX存放第32位的值

下面看看实现的代码:

//用汇编实现获取一段代码运行的时间

#include<iostream>

using namespace std;

void GetClockNumber (long high, long low);

void GetRunTime();

int main()

{

long HighStart,LowStart,HighEnd,LowEnd;

long numhigh,numlow;

//获取代码运行开始时cpu内部计数器的值

__asm

{

RDTSC

mov HighStart, edx

mov LowStart, eax

}

for(int i= 0; i<100000; i++ )

{

for(int i= 0; i<100000; i++ )

{

}

}

//获取代码结束时cpu内部计数器的值,并减去初值

__asm

{

RDTSC

mov HighEnd, edx

Mov LowEnd, eax

;获取两次计数器值得差

sub eax, LowStart

cmp eax, 0 ; 如果低32的差为负则求返,因为第二次取得永远比第一次的大

jg L1

neg eax

jmp L2

L1: mov numlow, eax

L2: sbb edx, HighStart

mov numhigh, edx

}

//把两个计数器值之差放在一个64位的整形变量中

//先把高32位左移32位放在64的整形变量中,然后再加上低32位

__int64 timer =(numhigh<<32) + numlow;

//输出代码段运行的时钟周期数

//以频率11Gcpu为例,如果换计算机把其中的11改乘其它即可,因为相信大家的cpu都应该在1G以上 ^_^

cout<< (double) (timer /11/1000000000) << endl;

return 0;

}

这样通过一条简单的汇编指令就可以获得程序或一段代码的大概时间,不过并不能得到运行的确切时间,因为即使去掉中间的循环,程序也会有个运行时间,

因为在第一次取得计数器的值后,有两条汇编指令mov HighStart, edx mov LowStart, eax这两条指令当然也有运行时间 ,当然你可以减去这两条指令的运行时间(在11G的机子上是3e-8s),这样会更精确一点。

如果你要确切知道程序的运行时间,专业的测试软件肯定会更好一点,不过好像一般没有必要获取除非专门的要求的程序。

不过能DIY一个也是不错的,不管有没有,最起码你可以学到在VC++中如何嵌入汇编代码以及如何使用32位的寄存器,其实和16位的寄存器一样使用,将来64的也应该一样,只不过位数不同罢了

网上找的,对你应该有帮助。。。

指令周期:取出并执行一条指令的时间。

机器周期:通常用内存中读取一个指令字的最短时间来规定CPU周期。(也就是计算机完成一个基本 *** 作所花费的时间)

时钟周期:处理 *** 作的最基本单位。(CPU的主频)

指令周期、机器周期和时钟周期之间的关系:指令周期通常用若干个机器周期表示,而机器周期时间又包含有若干个时钟周期。

以上就是关于Linux任务计划和周期性任务执行全部的内容,包括:Linux任务计划和周期性任务执行、vc ++获取程序执行时间时间、什么是指令周期什么是机器周期什么是时钟周期三者之间的关系如何等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10129357.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存