当前位置:  技术问答>linux和unix

怎么样做到程序的定时运行?

    来源: 互联网  发布时间:2016-04-24

    本文导语:  现在想让一个线程,在每天早上二点定时执行,因为是服务器,早上的用户最少,怎样做到这一点呢,有相关经验的朋友麻烦告诉一声,谢谢。(平台linux,开发语言c/c++) | cat  /etc/crontab SHELL=/b...

现在想让一个线程,在每天早上二点定时执行,因为是服务器,早上的用户最少,怎样做到这一点呢,有相关经验的朋友麻烦告诉一声,谢谢。(平台linux,开发语言c/c++)

|
cat  /etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

#run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly



前四行是用来配置 cron 任务运行环境的变量。SHELL 变量的值告诉系统要使用哪个 shell 环境(在这个例子里是 bash shell);PATH 变量定义用来执行命令的路径。cron 任务的输出被邮寄给 MAILTO 变量定义的用户名。如果 MAILTO 变量被定义为空白字符串(MAILTO=""),电子邮件就不会被寄出。HOME 变量可以用来设置在执行命令或脚本时使用的主目录。 

/etc/crontab 文件中的每一行都代表一项任务,它的格式是:
minute   hour   day   month   dayofweek   command

minute — 分钟,从 0 到 59 之间的任何整数
hour — 小时,从 0 到 23 之间的任何整数
day — 日期,从 1 到 31 之间的任何整数(如果指定了月份,必须是该月份的有效日期)
month — 月份,从 1 到 12 之间的任何整数(或使用月份的英文简写如 jan、feb 等等)
dayofweek — 星期,从 0 到 7 之间的任何整数,这里的 0 或 7 代表星期日(或使用星期的英文简写如 sun、mon 等等)
command — 要执行的命令(命令可以是 ls /proc >> /tmp/proc 之类的命令,也可以是执行你自行编写的脚本的命令。)


在以上任何值中,星号(*)可以用来代表所有有效的值。譬如,月份值中的星号意味着在满足其它制约条件后每月都执行该命令。 
整数间的短线(-)指定一个整数范围。譬如,1-4 意味着整数 1、2、3、4。 
用逗号(,)隔开的一系列值指定一个列表。譬如,3, 4, 6, 8 标明这四个指定的整数。 
正斜线(/)可以用来指定间隔频率。在范围后加上 / 意味着在范围内可以跳过 integer。譬如,0-59/2 可以用来在分钟字段定义每两分钟。间隔频率值还可以和星号一起使用。例如,*/3 的值可以用在月份字段中表示每三个月运行一次任务。 
开头为井号(#)的行是注释,不会被处理。

楼主看按照此方式将自己的程序加在里面,即可做到定时运行。

|

第一行:;export PATH (可加  环境变量可在本机 env 命令下查看,“PATH=” 那行)


第二行:* * * * * cd ;   

5个*为:


1,分钟 (0-59) 

2,小時 (0-23) 

3,日期 (1-31) 

4,月份 (1-12) 

5,星期 (0-6)//0代表星期天 

|

如果实时要求不高,你的方法既简单也实用

|


sleep只是把线程挂起吧。可以用循环定时器+信号实现,线程运行完毕启动定时器,根据需要设置定时周期,等定时器Timerout时调用处理函数启动线程,如此循环.... 定时器可使用系统提供的Librt库。

|
如果要求不用那么精确,可以试试下面的代码:

#include 
#include 
#include 

     struct timeval tv;
    struct timezone tz;
    struct tm *now;
    int nflag = 0;

    while(1)
    {
        gettimeofday(&tv, &tz);
        now = localtime((const time_t *)&tv.tv_sec);
        if(now->tm_hour tm_hour >= 2 && (nflag == 1))  // if the time arrives at 02:00
        {
            nflag = 0;
            执行任务;
        }
        sleep(1);
    }

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C语言在控制台下如何做到输出不滚屏
  • linux中的用户,用什么命令修改密码(要一条命令做到)???
  • 提问:FLASH能做到透明背景的小动画吗?
  • 如何做到linux和win2000的双引导呢???
  • linux技术能做到40岁?
  • 怎么做到每秒刷新一次?
  • JSP 里面 怎么取得用户 的IP地址???有没有什么函数可以做到?
  • sqlserver iis7站长之家
  • 请问高手,java的打印效果你们能做到什么程度?
  • 如何做到在命令行下输入文字,然后输出包含该文字的图片(bmp or gif)?
  • 怎么样可以做到将图画保存到一个对象中,并在适当时机重画。
  • WAP开发中,中文显示如何做到?
  • 如何做到同步一个类中定义的一个方法?
  • 我想删了redhat7.2,包括gurb,怎样在不伤及windows做到
  • 在网关上如何控制,可以使客户机上网时做到即插即用
  • 我要在JSP中取GIF和JPEG图片的长和宽,JSP能做到吗????????
  • /scratchbox和/scratchbox/user/<username>/scratchbox的内容完全一样,但是又不是链接,请问怎么做到的
  • 据说linux分区只能在前8G,40G的硬盘分区先装windows怎么做到呢?
  • RH7总是不认我的128M的内存。有什么有效而使初学者能够做到的办法吗?谢谢
  • 那里修改配置可以做到系统登陆进入默认是控制台,而不是图形界面?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3