• Linux定时任务调用sh文件


    1.编写sh文件
      创建:vi test.sh
      写入:date >> /xiaol/data.txt

    2.默认创建的这个sh问件是没有执行权限的,修改权限
      chmod 777 test.sh

    3.设置crontab定时任务
      打开定时任务配置文件:crontab -e
      定时调用test.sh:* * * * * /sambashare/test.sh

    4.保存退出

    5.如果有错,Linux会在执行的时候发送一份邮件给你
      cat /var/spool/mail/root

    备注:
      定时任务需要crond服务的支持
        1.启动方法  service crond restart
        2.该服务默认是开机启动的
      取消定时任务
        1.全部取消 crontab -r
        2.取消某个 crontab -e 配置文件,删除要取消的哪一行配置
      查看目前都有那些定时任务
        crontab -l

    第一个*        一小时当中的第几分钟      0-59
    第二个*        一天当中的第几小时          0-23
    第三个*        一个月当中的第几天          1-31
    第四个*        一年当中的第几月              1-12
    第五个*        一周当中的星期几              0-7(0和7都代表周日)

    *        代表任何时间,比如第一个 * 就代表一小时中的每分钟都执行
    ,        代表不连续的时间,比如 0 8,12,16 * * * 代表每天8,12,16点0分执行
    -        代表连续的时间范围,比如0 5 * * 1-6 代表在周一到周六凌晨5点0分执行
    */n     代表每个多久执行一次,比如*/10 * * * *代表每隔10分钟执行一次

    例子:
    45 22 * * *    
    在22点45分执行

    0 17 * * 1     
    在每周1的17点0分执行

    0 5 1,15 * *  
    在每月1号和15号的凌晨5点0分执行

    40 4 * * 1-5  
    在每周一到周五的凌晨4点40分执行

    */10 4 * * *    
    在每天的凌晨4点,每隔10分钟执行一次

    0 0 1,15 * 1  
    每月1号和15号,每周1的0点0分都会执行
      注意:星期几和几号最好不要同时出现,他们的意义都是天,容易混淆

    需要根据时间删除这个目录下的文件,/home/lifeccp/dicom/studies,清理掉20天之前的无效数据。

    可以使用下面一条命令去完成:

    1
    find /home/lifeccp/dicom/studies -mtime +21 -name "*.*" -exec rm -Rf {} ;

    这个是根据时间删除。

    下面简要解释一下,这句shell命令:

    1
    find /home/lifeccp/dicom/studies -mtime +21 -name "*.*" -exec rm -Rf {} ;
    • /home/lifeccp/dicom/studies :准备要进行清理的任意目录
    • -mtime:标准语句写法
    • +10:查找10天前的文件,这里用数字代表天数,+30表示查找30天前的文件
    • "*.*":希望查找的数据类型,"*.jpg"表示查找扩展名为jpg的所有文件,"*"表示查找所有文件
    • -exec:固定写法
    • rm -rf:强制删除文件,包括目录
    •  {} ; :固定写法,一对大括号+空格+/+;

     当然也可以根据文件名、根据大小,根据其他不同条件过滤删除,或者修改等,可以考虑sort等命令结合使用。

    find 对应目录 -mtime +天数 -name “文件名” -exec rm -rf {} ;

    例1:

    find /usr/local/backups -mtime +10 -name “*.*” -exec rm -rf {} ;

    将/usr/local/backups目录下所有10天前带”.”的文件删除

    find:Linux的查找命令,用户查找指定条件的文件

    /usr/local/backups:想要进行清理的任意目录

    -mtime:标准语句写法

    +10:查找10天前的文件,这里用数字代表天数,+30表示查找30天前的文件

    “*.*”:希望查找的数据类型,”*.jpg”表示查找扩展名为jpg的所有文件,”*”表示查找所有文件,这个可以灵活运用,举一反三

    -exec:固定写法

    rm -rf:强制删除文件,包括目录

    {} ; :固定写法,一对大括号+空格++;

    例2:

    1.#touch /usr/local/bin/clear

    #chmod 777 clear

    新建一个可执行文件clear

    2.vi clear

    编辑clear文件如下:

    #!/bin/sh

    find /usr/local/backups -mtime +10 -name “*.*” -exec rm -rf {} ;

    ok,保存退出3.#crontab -e

    将clear文件加入到系统计划任务,到点自动执行

    输入:

    * 2 * * */usr/local/bin/clear

    这里的设置是每天凌晨2点执行clear文件进行数据清理,可以研究一下cron,制定自己需要的计划任务

    示例:

    #!/bin/sh

    find /usr/local/jboss-4.2.3.GA/server/default/log -mtime +6 -name “server.log.*” -exec rm -rf {} ;

    exit

    [root@web3 ~]# crontab -l

    编辑用户的Crontab文件

    crontabl -e

    用户所建立的Crontab文件存于/var/spool/cron中,其文件名与用户名一致。它的格式共分为六段,前五段为时间设定段,第六段为所要执行的命令段,格式如下:* * * * *其时间段的含义如表二:

    含义

    取值范围

    第一段

    代表分钟

    0—59

    第二段

    代表小时

    0—23

    第三段

    代表日期

    1—31

    第四段

    代表月份

    1—12

    第五段

    代表星期几,0代表星期日

    0—6

    名称 : crontab使用权限 : 所有使用者使用方式 :crontab [ -u user ] filecrontab [ -u user ] { -l | -r | -e }说明 :crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。餐数 :-e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)-r : 删除目前的时程表-l : 列出目前的时程表时程表的格式如下 :f1 f2 f3 f4 f5 program

    其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其馀类推使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。例子 :每月每天每小时的第 0 分钟执行一次 /bin/ls :0 7 * * * /bin/ls

    在 12 月内, 每天的早上 6 点到 12 点中,每隔 20 分钟执行一次 /usr/bin/backup :0 6-12/3 * 12 * /usr/bin/backup

    周一到周五每天下午 5:00 寄一封信给 alex@domain.name :0 17 * * 1-5 mail -s “hi” alex@domain.name /dev/null 2>&1 即可例:如果用户的Crontab文件的内容是:29 19 * * * echo its dinner time,则系统每天的19:29显示‘its dinner time’示例(创建一个cron全过程,每分钟都会在test.txt里输入当前时间):

    1. 以普通用户登录linux系统(我用的是CentOS4.1)

    2. $crontab –e说明:系统默认的编辑器是VIM,如果不是请加上以下shell:$EDITOR=vi$export EDITOR

    3. 输入”*/1 * * * * date >> $HOME/test.txt”,save and exit VIM

    4. $su root

    5. $cd /etc/init.d

    6. ./crond restart

    下面看看看几个具体的例子:

    ● 0 */2 * * * /sbin/service httpd restart 意思是每两个小时重启一次apache

    ● 50 7 * * * /sbin/service sshd start 意思是每天7:50开启ssh服务

    ● 50 22 * * * /sbin/service sshd stop 意思是每天22:50关闭ssh服务

    ● 0 0 1,15 * * fsck /home 每月1号和15号检查/home 磁盘

    ● 1 * * * * /home/bruce/backup 每小时的第一分执行 /home/bruce/backup这个文件

    ● 00 03 * * 1-5 find /home “*.xxx” -mtime +4 -exec rm {} ; 每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。● 30 6 */10 * * ls 意思是每月的1、11、21、31日的6:30执行一次ls命令

  • 相关阅读:
    hbase 自定义过滤器
    idea的protobuf使用
    Docker自动补全容器名
    Docker普通用户不使用sudo提权
    Hadoop安装错误总结
    Git中撤销提交
    Python经典算法片段
    Git设置彩色输出
    Git同步远程fork的项目
    Git错误汇总
  • 原文地址:https://www.cnblogs.com/zhangwufei/p/8982224.html
Copyright © 2020-2023  润新知