zoukankan      html  css  js  c++  java
  • Linux---CentOS 定时运行脚本配置

    很多时候我们有希望服务器定时去运行一个脚本来触发一个操作,比如使用七牛的工具上传,如果同步文件里面有新增加一个文件,这个时候我们可以提供定时脚本去完成我们需要的同步命令(七牛的qrsbox工具是自动会同步的,只需要在同步文件夹里面增加一个文件就会自动监听上传)。

    1.安装crontab

    [root@CentOS ~]# yum install vixie-cron
    [root@CentOS ~]# yum install crontabs

    vixie-cron软件包是cron的主程序; 
    crontabs软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。

    2.开启crontab服务

    service crond start //启动服务

    用以下的方法启动、关闭这个cron服务: 
    service crond start //启动服务 
    service crond stop //关闭服务 
    service crond restart //重启服务 
    service crond reload //重新载入配置

    查看crontab服务状态:service crond status 
    手动启动crontab服务:service crond start 
    查看crontab服务是否已设置为开机启动,执行命令:ntsysv 
    加入开机自动启动: 
    chkconfig –level 35 crond on

    另外顺带介绍下ntsysv和chkconfig命令: 
    关于ntsysv命令是类图形界面管理模式来设置开机启动,需要先安装才可以使用,yum install -y ntsysv安装好之后只需要运行一个ntsysv即可出现一个类似图像化的管理界面。 
    上下键:可以在中间的方框当中,在各个服务之间移动; 
    空格键:可以用来选择你所需要的服务,[*]表示开起启动; 
    tab键:可以在方框、OK、Cancel之间移动; 
    [F1]键:可以显示该服务的说明。

    关于chkconfig命令行的形式设置是否开机自启动或者查询某个服务6个开机级别的运行情况。 
    设置开机自动启动crond服务: 
    [root@CentOS ~]# chkconfig crond on 
    查看各个开机级别的crond服务运行情况 
    [root@CentOS ~]# chkconfig –list crond 
    crond 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭 
    可以看到2、3、4、5级别开机会自动启动crond服务 
    取消开机自动启动crond服务: 
    [root@CentOS ~]# chkconfig crond off

    3.设置需要执行的脚本 
    新增调度任务可用两种方法: 
    1)、在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。 
    2)、直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务。 
    crontab -e配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务 
    查看调度任务 
    crontab -l //列出当前的所有调度任务 
    crontab -l -u jp //列出用户jp的所有调度任务 
    删除任务调度工作 
    crontab -r //删除所有任务调度工作 
    直接编辑 vim /etc/crontab ,默认的文件形式如下:

    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    HOME=/
    
    # For details see man 4 crontabs
    
    # 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

    这个文本解释的已经比较直观了,其中 
    星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。 
    逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9” 
    中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6” 
    正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

    这里举几个例子,基本涵盖了常见的一些情况: 
    实例1

    5      *       *           *     *     ls         指定每小时的第5分钟执行一次ls命令
    30     5       *           *     *     ls         指定每天的 5:30 执行ls命令
    30     7       8           *     *     ls         指定每月8号的7:30分执行ls命令
    30     5       8           6     *     ls         指定每年的6月8日5:30执行ls命令
    30     5       8           6     *     ls         指定每年的6月8日5:30执行ls命令
    30     6       *           *     0     ls         指定每星期日的6:30执行ls命令
    30     3     10,20         *     *     ls         每月10号及20号的3:30执行ls命令
    25     8-11    *           *     *     ls         每天8-11点的第25分钟执行ls命令
    */15   *       *           *     *     ls         每15分钟执行一次ls命令
    30     6     */10          *     *     ls         每个月中,每隔10天6:30执行一次ls命令
    22     4       *           *     *     root     run-parts     /etc/cron.daily
    #每天4:22以root身份执行/etc/cron.daily目录中的所有可执行文件,run-parts参数表示,执行后面目录中的所有可执行文件。

    实例2

    #每晚的21:30 重启apache
    30 21 * * * /usr/local/etc/rc.d/lighttpd restart
    #每月1、10、22日的4 : 45重启apache
    45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
    #每周六、周日的1 : 10重启apache
    10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
    #每天18 : 00至23 : 00之间每隔30分钟重启apache
    0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
    #每星期六的11 : 00 pm重启apache
    0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
    #晚上11点到早上7点之间,每隔一小时重启apache
    0 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
    #每一小时重启apache
    0 */1 * * * /usr/local/etc/rc.d/lighttpd restart
    #每月的4号与每周一到周三的11点重启apache
    0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
    #一月一号的4点重启apache
    0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
    #每半小时同步一下时间
    0/30 * * * * /usr/sbin/ntpdate 210.72.145.44

    注意 
    * *1 * * * 命令表示是每小时之内的每一分钟都执行。 
    必须指定在每个小时的第几分钟执行,也就是说第一个*号必须改成一个数值。 
    因为*号表示的就是每一分钟。 
    另外小时位的/1和没有区别,都是每小时一次。 
    如果是设置*/2,实际上是能被2整除的小时数而不是从定时设置开始2小时后执行,比如9点设的到10点就会执行。

    最后可能会遇到下面这个问题 
    root用户下 输入 crontab -l 显示 
    no crontab for root 例如: 
    [root@CentOS ~]# crontab -l 
    no crontab for root 
    这个问题非常简单,同样在 root 用户下输入 crontab -e 
    按 Esc 按: wq 回车 
    在输入 crontab -l 就没有问题了 
    主要原因是由于这个liunx服务器 第一次使用 crontab ,还没有生成对应的文件导致的,执行了 编辑(crontab -e)后 就生成了这个文件

  • 相关阅读:
    poj 3280 Cheapest Palindrome(区间DP)
    POJ 2392 Space Elevator(多重背包)
    HDU 1285 定比赛名次(拓扑排序)
    HDU 2680 Choose the best route(最短路)
    hdu 2899 Strange fuction (三分)
    HDU 4540 威威猫系列故事――打地鼠(DP)
    HDU 3485 Count 101(递推)
    POJ 1315 Don't Get Rooked(dfs)
    脱离eclipse,手动写一个servlet
    解析xml,几种方式
  • 原文地址:https://www.cnblogs.com/hurry-up/p/7866221.html
Copyright © 2011-2022 走看看