zoukankan      html  css  js  c++  java
  • Linux基础--例行工作

    1、仅进行一次的工作排程--at
    at的工作情况其实是这样的:
    1)先找寻/etc/at.allow这个档案,写在这个档案中的使用者才能使用at,没有在这个档案中的使用者则不能使用at(即使没有写在at.deny当中);
    2)如果没有/etc/at.allow就寻找/etc/at.deny这个档案,若写在这个at.deny的使用者则不能使用at;
    3)如果两个档案都不存在,那么只有root可以使用at这个指令。

    [root@linux ~]# at [-m] TIME
    参数:
    -m:当at的工作完成后,以email的方式通知使用者该工作已完成
    TIME:时间格式,这里可以定义出什么时候要进行at这项工作的时间,格式有:
    HH:MM  ex> 04:00   在今日的HH:MM时刻进行,若该时刻已超过则明天的HH:MM进行此工作
    HH:MM YYYY-MM-DD  ex> 04:00 2005-12-03    强制规定在某年某月的某一天的特殊时刻进行该工作
    HH:MM[am|pm] [Month] [Date]  ex> 04pm December 3    也是一样,强制在某年某月某日的某时刻进行
    HH:MM[am|pm] + number [minutes|hours|days|weeks] ex> now + 5 minutes  ex> 04pm + 3 days   就是说在某个时间点再加几个时间后才进行。
     
    范例一:再过五分钟后,将/root/.bashrc寄给dmtsai这个使用者
    [root@linux ~]# at now + 5 minutes
    at> /bin/mail dmtsai -s "testing at job" < /root/.bashrc
    at> <EOT> <==这里输入 [ctrl] + d 就会出现 <EOF> 的字样!代表结束!
    job 8 at 2005-09-07 10:47

    范例二:由于机房预计于2005/09/16停电,我想要在2005/09/15 23:00关机?
    [root@linux ~]# at 23:00 2005-09-15
    at> /bin/sync
    at> /bin/sync
    at> /sbin/shutdown -h now
    at> <EOT>
    job 10 at 2005-09-15 23:00
        at还可以在一个工作内输入多个指令呢!万一我下达了at之后,才发现指令输入错误该如何是好?就将他移除!利用atq与atrm。
    [root@linux ~]# atq
    [root@linux ~]# atrm [jobnumber]
    范例一:查询目前主机上面有多少的at工作排程?
    [root@linux ~]# atq
    10 2005-09-15 23:00 a root
       上面说的是在2005/09/15 的 23:00有一项工作,该项工作指令下达者为root,而且,该项工作的工作号码(jobnumber)为10号!

    范例二:将上述的第10个工作移除
    [root@linux ~]# atrm 10
    [root@linux ~]# atq
       没有任何信息,表示该工作被移除了。

    2、循环执行的例行性命令--crontab
    1)使用者的设定:crontab
    /etc/cron.allow:将可以使用crontab的账号写入其中,若不在这个档案内的使用者则不可使用crontab;
    /etc/cron.deny: 将不可以使用crontab的账号写入其中,若未记录到这个档案当中的使用者,就可以使用crontab。以优先级来说/etc/cron.allow比/etc/cron.deny要优先。
       当使用者使用crontab这个指令来建立工作排程之后,该项工作就会被纪录到/var/spool/cron/里面去,而且是以账号来作为判别,另外cron执行的每一项工作都会被纪录到/var/log/cron中,所以如果您的Linux不知道有否被植入木马时, 也可以搜寻一下/var/log/cron这个登录档。
    [root@linux ~]# crontab [-u username] [-l|-e|-r]
    参数:
    -u:只有root才能进行这个任务,亦即帮其它使用者建立/移除crontab;
    -e:编辑crontab的工作内容
    -l:查阅crontab的工作内容
    -r:移除crontab的工作内容
    范例一:用dmtsai在每天的12:00发信给自己
    [dmtsai@linux ~]$ crontab -e
    # 此时会进入 vi 的编辑画面让您编辑工作!注意到,每项工作都是一行。
    0 12 * * * mail dmtsai -s "at 12:00" < /home/dmtsai/.bashrc
    #分 时 日 月 周 |<==============指令串========================>|

    五个时间参数为:
    代表意义  分钟  小时  日期  月份  周
    数字范围  0-59  0-23  1-31  1-12  0-7
       当周为0或7时,都代表星期天,另外,还有一些辅助的字符,大概有底下这些:
    *  代表任何时刻都接受的意思,举例来说,上表的范例一那个日月周都是*, 就代表着不论何月、何日的礼拜几的12:00都执行后续指令
    ,  代表分隔时段的意思,举例来说,如果要下达的工作是3:00与6:00时,就会是0 3,6 * * * command还是有五栏,不过第二栏是3,6,代表3与6都适用
    -  代表一段时间范围内,举例来说,8点到12点之间的每小时的20分都进行工作:20 8-12 * * * command 仔细看到第二栏变成8-12代表8,9,10,11,12都适用的意思
    /n 那个n代表数字,亦即是每隔n单位间隔的意思,例如每五分钟进行一次,则:*/5 * * * * command

    如何查询使用者目前的crontab内容呢? 我们可以这样来看看:
    [dmtsai@linux ~]$ crontab -l
    59 23 1 5 * mail kiki < /home/dmtsai/lover.txt
    */5 * * * * /home/dmtsai/test.sh
    30 16 * * 5 mail friend@his.server.name < /home/dmtsai/friend.txt
       注意,若仅想要移除一项工作而已的话,必须要用crontab -e去编辑,如果想要全部的工作都移除,才使用crontab -r。
    [dmtsai@linux ~]$ crontab -r
    [dmtsai@linux ~]$ crontab -l
    no crontab for dmtsai

    2)系统的设定:/etc/crontab
       在Linux下的crontab会自动的帮我们每分钟重新读取一次/etc/crontab的例行工作事项,但是某些原因或者是其它的Unix 系统中,由于crontab是读到内存当中的,所以在你修改完/etc/crontab之后,可能并不会马上执行,这个时候请重新启动crond 这个服务/etc/init.d/crond restart
    [root@linux ~]# 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 <==每个月 1 号
    分 时 日 月 周 执行者身份 指令串

    /etc/crontab这个档案里面支持两种下达指令的方式,一种是直接下达指令,一种则是以目录来规划,如:
    a、指令型态
    01 * * * * dmtsai mail -s "testing" kiki < /home/dmtsai/test.txt
    以dmtsai这个使用者的身份,在每小时执行一次mail指令。
    b、目录规划
    */5 * * * * root run-parts /root/runcron
    建立一个/root/runcron的目录,将要每隔五分钟执行的可执行档都写到该目录下,可以让系统每五分钟执行一次该目录下的所有可执行档。

    3)资源分配不均的问题
       如果每个流程都在同一个时间启动的话,那么在某个时段时,系统会变的相当的繁忙, 所以这个时候就必须要分别设定,可以这样做:
    [root@linux ~]# vi /etc/crontab
    1,6,11,16,21,26,31,36,41,46,51,56 * * * * root CMD1
    2,7,12,17,22,27,32,37,42,47,52,57 * * * * root CMD2
    3,8,13,18,23,28,33,38,43,48,53,58 * * * * root CMD3
    4,9,14,19,24,29,34,39,44,49,54,59 * * * * root CMD4

    4)取消不要的输出项目
       当有一个排程一直出错(如DNS的侦测系统当中若DNS上层主机挂掉,那么你就会一直收到错误讯息)怎么办?直接以命令重导向将输出的结果输出到/dev/null 这个垃圾桶当中。

  • 相关阅读:
    uva 147 Dollars
    hdu 2069 Coin Change(完全背包)
    hdu 1708 Fibonacci String
    hdu 1568 Fibonacci
    hdu 1316 How Many Fibs?
    poj 1958 Strange Towers of Hanoi
    poj 3601Tower of Hanoi
    poj 3572 Hanoi Tower
    poj 1920 Towers of Hanoi
    筛选法——素数打表
  • 原文地址:https://www.cnblogs.com/defias/p/3427308.html
Copyright © 2011-2022 走看看