精华内容
下载资源
问答
  • linux 定时任务规则
    千次阅读 多人点赞
    2021-06-20 18:09:10

    Linux的定时任务详解

    一 什么是定时任务?

    任务调度的crond常驻命令
    crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。而linux任务调度的工作主要分为以下两类:
    1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
    2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置
    3、Crontab是UNIX系统下的定时任务触发器,其使用者的权限记载在下列两个文件中:文件含义

    /etc/cron.deny 该文件中所列的用户不允许使用Crontab命令
    /etc/cron.allow 该文件中所列的用户允许使用Crontab命令
    /var/spool/cron/ 是所有用户的crontab文件
    /var/spool/cron/crontabs
    

    二 控制定时任务

    cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。
      /sbin/service crond start //启动服务
      /sbin/service crond stop //关闭服务
      /sbin/service crond restart //重启服务
      /sbin/service crond reload //重新载入配置
      /sbin/service crond status //查看服务状态

    三 crontab命令

    crontab [-u username] [-l|-e|-r]
    参数:
    -u: 只有root才能进行这个任务,也即帮其他用户新建/删除crontab工作调度;
    -e: 编辑crontab 的工作内容;
    -l: 查阅crontab的工作内容;
    -r: 删除所有的crontab的工作内容,若仅要删除一项,请用-e去编辑。
    

    四 实际运用定时任务

    为当前用户创建cron服务

    1. 键入 crontab -e 编辑crontab服务文件
      例如 文件内容如下:
    */2 * * * * /bin/sh/home/admin/jiaoben/buy/deleteFile.sh
    
     保存文件并并退出
    
     */2 * * * * /bin/sh /home/admin/jiaoben/buy/deleteFile.sh
    

    */2 * * * * 通过这段字段可以设定什么时候执行脚本
    /bin/sh /home/admin/jiaoben/buy/deleteFile.sh 这一字段可以设定你要执行的脚本,这里要注意一下bin/sh 是指运行 脚本的命令 后面一段时指脚本存放的路径

    1. 查看该用户下的crontab服务是否创建成功, 用 crontab -l 命令
     crontab  -l 
    
    1. 启动crontab服务
      一般启动服务用 /sbin/service crond start 若是根用户的cron服务可以用 sudo service crond start

    2. 查看服务是否已经运行用 ps -ax | grep cron

    3. crontab命令
      cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:

       crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数  
      crontab -l //列出某个用户cron服务的详细内容
      crontab -r //删除没个用户的cron服务
      crontab -e //编辑某个用户的cron服务
    

    比如说root查看自己的cron设置:crontab -u root -l
      再例如,root想删除fred的cron设置:crontab -u fred -r
      在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e
      进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt
    任务调度的crond常驻命令
    crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此
    任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工
    作便会自动执行该工作。

    1. crontab命令选项:
      -u指定一个用户
      -l列出某个用户的任务计划
      -r删除某个用户的任务
      -e编辑某个用户的任务
    2. cron文件语法:
     分     小时     日      月      星期     命令
     0-59   0-23   1-31    1-12    0-6     command 
    

    (取值范围,0表示周日一般一行对应一个任务)

     记住几个特殊符号的含义:
         “*”代表取值范围内的数字,
         “/”代表”每”,
         “-”代表从某个数字到某个数字,
         “,”分开几个离散的数字
    
    1. 任务调度设置文件的写法
      可用crontab -e命令来编辑,编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件
      具体格式如下:
    Minute    Hour  Day   Month    Dayofweek   command
      分钟     小时   天     月       天每星期       命令
    
     每个字段代表的含义如下:
     Minute             每个小时的第几分钟执行该任务
     Hour               每天的第几个小时执行该任务
     Day                 每月的第几天执行该任务
     Month             每年的第几个月执行该任务
     DayOfWeek     每周的第几天执行该任务
     Command       指定要执行的程序
    

    在这些字段里,除了“Command”是每次都必须指定的字段以外,其它字段皆为可选 字段,可视需要决定。对于不指定的字段,要用“*”来填补其位置。

    举例如下:

    命令解释
    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 6 * * 0 ls指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1, 以此类推, 也可以用英文来表示,sun表示星期天,mon表示星期一等。]
    30 3 10,20 * * ls每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]
    25 8-11 * * * ls每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]
    */15 * * * * ls每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]
    30 6 */10 * * ls每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls 命令。 ]
    50 7 * * * root run-parts /etc/cron.daily每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件 [ 注:run-parts参数表示,执行后面目录中的所有可执行文件。]
    1. 新增调度任务
      新增调度任务可用两种方法:
      1)、在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。
      2)、直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务。
    2. 查看调度任务
      crontab -l //列出当前的所有调度任务
      crontab -l -u jp //列出用户jp的所有调度任务
    3. 删除任务调度工作
      crontab -r //删除所有任务调度工作

    五 会遇到的问题及解决方法

    5.1 权限问题

    定时任务往往会出现权限问题
    crontab权限问题到/var/adm/cron/下一看,文件cron.allow和cron.deny是否存在
    用法如下:
    1、如果两个文件都不存在,则只有root用户才能使用crontab命令。
    2、如果cron.allow存在但cron.deny不存在,则只有列在cron.allow文件里的用户才能使用crontab命令,如果root用户也不在里面,则root用户也不能使用crontab。
    3、如果cron.allow不存在, cron.deny存在,则只有列在cron.deny文件里面的用户不能使用crontab命令,其它用户都能使用。
    4、如果两个文件都存在,则列在cron.allow文件中而且没有列在cron.deny中的用户可以使用crontab,如果两个文件中都有同一个用户,
    以cron.allow文件里面是否有该用户为准,如果cron.allow中有该用户,则可以使用crontab命令。

    5.2 脚本注意问题

    1:定时任务要加注释
    2:定时任务命令或脚本结尾加 &>/dev/null 或 >/dev/null 2>&1 或 1>/dev/null 2>/dev/null
    3:定时任务执行shell脚本前加/bin/sh,定时任务执行shell脚本不必添加执行权限
    4:定时任务命令或程序尽量写到脚本里,定时任务只要执行脚本即可
    注意操作步骤:
      (1)、命令行执行
      (2)、编写脚本
      (3)、测试脚本
      (4)、设置定时任务
    5:生产任务程序不要随意打印输出信息
    6:定时任务执行的脚本要规范路径 (例如 /server/script)
    7:配置定时任务要规范操作过程
    8:定时任务执行特殊的字符需要进行转义,否则会报错,例如 百分号% 转义 %
    9:定时任务脚本中如果涉及使用到环境变量,必须在脚本中重新定义,不然,定时任务识别不了

    更多相关内容
  • 定时任务作用:在指定时间执行的程序。 定时任务一般分为两种: 1)临时性,突发性的,只执行一次的:at 命令。 2)定时性的,例行类的,每隔一个周期就要重复做的一件事: cron 命令 一、at命令 注意:at命令的服务...

    定时任务作用:在指定时间执行的程序。
    定时任务一般分为两种:
    1)临时性,突发性的,只执行一次的:at 命令。
    2)定时性的,例行类的,每隔一个周期就要重复做的一件事: cron 命令

    一、at命令

    注意:at命令的服务是atd,在执行之前使用命令:systemctl status atd 查看atd服务的状态; systemctl start atd 开启atd服务; systemctl is-enabled atd 设置为开机启动atd服务;
    在 Centos6 查看启动服务
    chkconfig --list | grep atd

    在这里插入图片描述

    在18:50时在/root/目录下建立一个新目录test1(ctrl+d保存退出)
    at 时间

    at 20:00 2021-7-1   #21年7月1号晚上8点执行
    at now +5min  		#在5分钟后执行
    at 17:00 tomorrow   #明天下午 5 点执行
    at 7:00 pm +2 days  #在 2 天以后下午7点执行
    at 19:00 < /root/text1  #在晚上7点执行text1中的程序
    

    atq、at -l 可查看当前计划任务
    在这里插入图片描述
    由图可以看出还有两个at计划任务,at命令中执行完毕的命令不会再显示;查看具体执行的命令信息路径 /var/spool/at/

    at定时任务删除:
    atrm 任务编号
    在这里插入图片描述
    atrm 4 结束编号为4的定时任务

    二、cron 命令

    注意:(一定要开启crond服务哦)
    开启crond服务:systemctl start crond
    查询crond服务状态systemctl status crond

    crontab 命令格式及参数
    crontab -u user1 -e #指定user1用户的cron 服务编辑
    crontab -l #列出当前用户下的cron服务的详细内容
    crontab -u user1 -l #列出指定用户user1下的 cron服务的详细内容
    crontab -r #删除 cron 服务
    crontab -e #编辑 cron 服务

    crontab -e 编辑时的语法
    在这里插入图片描述
    ” 米号代表取值范围内的数字 (任意/每)
    / 指定时间的间隔频率 */10 * * * * *(任意10分钟)
    - 代表某个数值到某个数字(5-10)
    , 分开几个离散的数字(1,3,5-9,10)

    实例:在这里插入图片描述每隔一分钟,在/root/test/a.txt文件中追加写入123123;

    在这里插入图片描述在7月30号20点每五分钟将qweqwe写到a.txt的文件中一次

    在这里插入图片描述在7月30号七月的周五20点每五分钟将qweqwe写到a.txt的文件中一次

    在这里插入图片描述在7月30号七月的周五,凌晨2点和20点到23点,这两个时间段每隔五分钟将qweqwe写到a.txt的文件中一次

    展开全文
  • linux定时任务_linux定时任务

    千次阅读 2020-10-29 03:11:04
    1.定时任务介绍1.1 crond是什么crond是linux系统中用来定期执行命令或指定程序的一种服务或软件。特殊要求:(秒级别)crond服务就无法搞定了,一般工作中写脚本用守护进程执行[root@shellbiancheng jiaobenlianxi]# ...

    1.定时任务介绍

    1.1 crond是什么

    crond是linux系统中用来定期执行命令或指定程序的一种服务或软件。

    特殊要求:(秒级别)crond服务就无法搞定了,一般工作中写脚本用守护进程执行

    [root@shellbiancheng jiaobenlianxi]# cat while1.sh #!/bin/shwhile true do uptime sleep 2 done

    1.2 linux系统crond的定时任务

    (1)linux系统自身定期执行的任务操作,如轮询系统日志、备份系统数据、清理系统缓存等,这些任务无需我们人为干预。例如:

    [root@linzhongniao ~]# ls -l /var/log/messages* -rw-------. 1 root root 206776 Aug 2 17:43 /var/log/messages -rw-------. 1 root root 448307 Jul 8 08:54 /var/log/messages-20180708 -rw-------. 1 root root 742560 Jul 16 04:05 /var/log/messages-20180716 -rw-------. 1 root root 1293433 Jul 22 15:15 /var/log/messages-20180722 -rw-------. 1 root root 622193 Jul 30 20:14 /var/log/messages-20180730[root@linzhongniao ~]# ll /etc/|grep cron -rw-------. 1 root root541 Aug 24 2016 anacrontabdrwxr-xr-x. 2 root root 4096 Jul 16 14:19 cron.ddrwxr-xr-x. 2 root root 4096 Jul 16 14:18 cron.daily -rw-------. 1 root root 0 Aug 24 2016 cron.denydrwxr-xr-x. 2 root root 4096 Jul 16 14:19 cron.hourlydrwxr-xr-x. 2 root root 4096 Jun 14 05:01 cron.monthly -rw-r--r--. 1 root root457 Sep 27 2011 crontabdrwxr-xr-x. 2 root root 4096 Sep 27 2011 cron.weekly

    2)用户执行的任务操作:某个用户或系统管理员定期要做的任务工作,例如每隔5分钟和互联网上时间服务器进行同步,每天晚上0点备份站点数据及数据库数据,一般这些工作需要由每个用户自行设置才行。

    用户执行的任务工作,也就是运维管理员执行的任务工作,因此这个用户执行的任务是我们的重点。

    1.3 linux系统下定时任务软件种类

    linux系统下的定时任务还真不少,例如:at,crontab,anacron

    at:适合仅执行一次就结束的调度任务命令,例如:某天晚上需要处理一个任务,仅仅是这一天的晚上,属于突发性任务,要执行at命令,还需要启动atd的服务才行

    [root@linzhongniao ~]# chkconfig --list|grep atdatd 0:off 1:off 2:off 3:off 4:off 5:off 6:off[root@linzhongniao ~]# chkconfig --list atdatd 0:off 1:off 2:off 3:off 4:off 5:off 6:off

    2.定时任务使用说明

    [root@linzhongniao ~]# crontab --helpcrontab: invalid option -- '-'crontab: usage error: unrecognized optionusage: crontab [-u user] filecrontab [-u user] [ -e | -l | -r ] 《==指令语法(default operation is replace, per 1003.2) -e (edit user's crontab) 《==编辑用户的定时任务 -l (list user's crontab) 《==列出用户的定时任务 -r (delete user's crontab) 《==删除用户的定时任务 -i (prompt before deleting user's crontab) 《==在删除用户的crontab之前提示 -s (selinux context)

    命令格式

    crontab –u (指定用户默认是root)-[e|l|r]

    2.1 指令说明

    通过crontab我们可以在固定的时间执行指定的系统指令或script脚本。时间间隔的单位是分钟,小时,日,月,周及以上的任意组合(注意:日和周不要组合)。

    2.2 使用者权限及定时任务文件

    d44aaca6341470570a32523e75acdf4d.png

    2.3 指令选项说明表

    969a3c54d0249f53acf6df1746a3b294.png

    2.4 指令的使用格式

    用户所建立的crontab文件存于/var/spool/cron中如:root用户的定时任务配置文件为/var/spool/cron/root。

    crontab用户的定时任务一般分为6段空格分隔。系统的定时任务则/etc/crontab分为7段,前5段为时间设定段,第六段以哪个用户执行crontab,第七段为所要执行的命令段如下

    01 * * * * root run-parts /etc/cron.hourly02 4 * * * root run-parts /etc/cron.daily22 4 * * 0 root run-parts /etc/cron.weekly42 4 1 * * root run-parts /etc/cron.monthly 

    系统的crontab文件是/etc/crontab

    [root@linzhongniao ~]# cat /etc/crontab SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# 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 分 时 日 月 周 用户 任务

    2.5 crontab语法格式中时间段得含义

    8c963064e149dca8b29b66df81b851b6.png

    提示:最后一次执行任务的时间是23:30

    2.6 crontab语法格式中特殊符号含义

    24acba941b7da38d9ea1afefa3b19976.png

    2.7 开启定时任务服务

    [root@linzhongniao ~]# chkconfig --list crondcrond 0:off 1:off 2:on3:on4:on5:on6:off[root@linzhongniao ~]# /etc/init.d/crond statuscrond (pid 1837) is running...[root@linzhongniao ~]# ps -ef|grep crond|grep -v greproot 1837 1 0 21:58 ?00:00:00 crond[root@linzhongniao ~]# /etc/init.d/crond restartStopping crond: [ OK ]Starting crond:[ OK ]

    2.8 编辑定时任务注意事项

    (1)编辑定时任务分钟位上必须用00格式表示

    例如,6月3日上午9:00去培训,规则为

    00 09 03 06 *

    (2)周和日不能同时使用

    强调周和日尽量不要同时用,否则可能达不到想要的效果

    例如:

    每周日上午9:30去上课

    30 09 * * 7或者 30 09 * * 0

    2.9 服务器时间同步

    (1)手动同步时间

    [root@linzhongniao ~]# dateSat Aug 4 12:08:20 CST 2018[root@linzhongniao ~]# date -s "23:00"Sat Aug 4 23:00:00 CST 2018[root@linzhongniao ~]# dateSat Aug 4 23:00:03 CST 2018[root@linzhongniao ~]# which ntpdate/usr/sbin/ntpdate[root@linzhongniao ~]# /usr/sbin/ntpdate ntp1.aliyun.com 4 Aug 12:10:21 ntpdate[1700]: step time server 52.163.118.68 offset -39052.961525 sec[root@linzhongniao ~]# dateSat Aug 4 12:10:30 CST 2018

    (2)用定时任务自动同步

    [root@linzhongniao ~]# crontab -l#sync sys time by linzhongniao at 2018-08-04 */2 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1[root@linzhongniao ~]# /etc/init.d/crond restartStopping crond: [ OK ]Starting crond:[ OK ][root@linzhongniao ~]# date -s "23:00"Sat Aug 4 23:00:00 CST 2018[root@linzhongniao ~]# dateSat Aug 4 23:00:06 CST 2018[root@linzhongniao ~]# dateSat Aug 4 12:21:53 CST 2018 

    机器少还可以和互联网上时间同步,如果有很多服务器,可以搭建一个内部的时间同步服务器ntp server。

    提示:如果不加“>/dev/null 2>&1”会因产生垃圾文件导致磁盘inode耗尽的问题。

    3.生产环境crontab专业案例

    每天晚上12点打包站点目录/var/www/html备份到/data目录下(最好每次按时间生成不同的备份包)

    [root@linzhongniao scripts]# cat httpd.sh#!/bin/bashcd /var/www/tar zcfp /data/html_$(date +%Y%m%d%H%M).tar.gz ./html[root@linzhongniao scripts]# crontab -l|tail -2#tar /var/www/html by shell scripts by linzhongniao at 20180800 00 * * * /bin/bash /server/scripts/httpd.sh >/dev/null 2>&1

    4.书写定时任务5个基本要领

    4.1 为定时任务规则加必要的注释

    加必要注释,写定时任务规则时尽可能加上注释(最好是英文注释),这是个好的习惯。

    4.2 执行脚本任务前加/bin/sh

    执行定时任务时,如果是执行脚本,请尽量在脚本前面加上/bin/sh命令,否则有可能忘了给脚本加执行权限,而无法完成任务。

    4.3 在指定用户下执行相关的定时任务

    需要root权限执行的任务可以登录到root用户下然后设置,如果不需要root权限,可以登录到普通用户下(也可以直接在root下crontab –u linzhongniao –e的写法直接设置)

    切换到linzhongniao用户

    [linzhongniao@linzhongniao ~]$ whoamilinzhongniao[linzhongniao@linzhongniao ~]$ crontab -l* * * * * /bin/sh tar.sh

    不切换用户直接查看定时任务

    [root@linzhongniao ~]# crontab -u linzhongniao -l* * * * * /bin/sh tar.sh

    看一下crond用户的配置文件

    [root@linzhongniao ~]# ll /var/spool/cron/total 8 -rw-------. 1 root root 25 Aug 4 14:25 linzhongniao -rw-------. 1 root root 222 Aug 4 2018 root

    平时工作中尽量多用crontab –e和crontab –l去编辑和查看定时任务,因为会有语法错误检查。

    如果给1000台服务器同时添加系统时间实时同步,不可能一个一个改,此时就需要批量分发工具或批量运维脚本。

    4.4 定时任务结尾加>/dev/null 2>&1

    /dev/null是特殊的设备,表示黑洞设备或空设备;2>&1表示标准错误输出和标准输出的输出的路径都一样。>/dev/null 2>&1相当于1>/dev/null,2>/dev/null

    5.系统定时任务配置文件/etc/crontab

    系统定时任务分七段,如果某一台服务器上的用crontab –l查看没有定时任务,就上系统定时任务里面用cat查看。

    [root@linzhongniao ~]# cat /etc/crontab SHELL=/bin/bash shell解释器PATH=/sbin:/bin:/usr/sbin:/usr/bin PATH变量MAILTO=root 定义如果任务有输出,发给哪个用户默认是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 分 时 日 月 周 用户 脚本

    通过run-parts使得系统可以定时执行目录下的所有可执行文件

    按周执行的配置文件

    [root@linzhongniao ~]# tree /etc/cron.weekly/etc/cron.weekly0 directories, 0 files

    按天执行的配置文件

    [root@linzhongniao ~]# ll /etc/cron.daily/total 24 -rwx------. 1 root root 180 Jul 10 2003 logrotate -rwx------. 1 root root 927 Mar 22 2017 makewhatis.cron -rwx------. 1 root root 189 Jan 26 2015 mlocate.cron -rwxr-xr-x. 1 root root 2126 Jul 19 2013 prelink -rwxr-xr-x. 1 root root 563 Nov 23 2013 readahead.cron -rwxr-xr-x. 1 root root 433 Nov 7 2015 tmpwatch

    6.生产场景如何调试crontab定时任务

    6.1 增加执行频率调试任务

    在调试时,把任务执行频率调快一些。如:每分钟、每5分钟执行一次,或者比当前时间推迟5分钟以后或者每2钟执行。按己想象的去执行了,如果没问题再改成需要的任务执行的时间。

    强调:有些任务是不允许频繁执行的,例如:定时往数据库里插入数据,这样的任务在测试机上测试好,然后正式线上出现问题的机会就少了。

    6.2 调整系统时间调适任务

    用正确的执行任务的时间。设置完成后,可以修改下当前时间,改成任务执行时间的前几分钟来测试(或者重启定时任务服务)如:定时任务9:00执行,我们可以把系统时间改成8:55分,然后观察是不是正确执行了,当前时间要比任务时间提前足够长,只在测试服务器上操作,如果生产服务器不要这样处理。

    6.3 通过日志输出调试定时任务

    在脚本中加入日志输出,然后把输出打到指定的日志中,然后观察日志内容结果。看是否执行或正确执行,或向下面的内容把脚本结果重定向到一个log文件里。比如 tar zcvf命令加-v参数,在把输出放到日志里面,通过日志就可以查看脚本有没有执行。

     */2 * * * * /usr/sbin/ntpdate time.windows.com >>/app/ntpdate.log 

    6.4 注意一些任务执行带来的问题

     */1 * * * * echo “==”>>/tmp/oldboy.log >/dev/null 2>&1

    这是隐蔽的无法执行的任务配置,原因是前面多了一个>>/tmp/oldboy.log,或者去掉>/dev/null 2>&1。

    6.5 注意环境变量导致的定时任务故障

    在调试java程序的时候,注意环境变量,要把环境变量的定义追加到脚本里,重新export一下。一般都放在全局变量/etc/profile里面,但是用定时任务执行脚本还需要重新加载一下环境变量。

    export PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"

    6.6 通过定时任务日志/var/log/cron调试定时任务

    [root@linzhongniao app]# tail -f /var/log/cronAug 5 11:01:01 localhost run-parts(/etc/cron.hourly)[2054]: starting 0anacronAug 5 11:01:02 localhost anacron[2068]: Anacron started on 2018-08-05Aug 5 11:01:02 localhost run-parts(/etc/cron.hourly)[2070]: finished 0anacronAug 5 11:01:02 localhost anacron[2068]: Will run job `cron.daily' in 34 min.Aug 5 11:01:02 localhost anacron[2068]: Jobs will be executed sequentiallyAug 5 11:02:01 localhost CROND[2075]: (root) CMD (/usr/sbin/ntpdate time.windows.com >/app/ntpdate.log)

    7.生产定时任务注意事项

    7.1 export变量问题

    crontab执行shell时只能识别不多的系统环境变量,普通变量是无法识别的。如果在编写的脚本中需要使用变量,最好使用export重新声明一下该变量,脚本才能正常执行。例如生产中和java相关的服务任务和脚本。也可以在脚本中添加PATH环境变量加完PATH环境变量就不用写执行命令全路径了。例如下面的/bin/tar,就可以不写了。

    [root@linzhongniao ~]# cat /server/scripts/tar.sh#!/bin/bashexport PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"cd /server//bin/tar zcf backup_$(date +%Y%m%d%H%M).tar.gz ./scripts

    7.2 任务路径问题

    一定要用绝对路径不要用相对路径。推荐定时执行脚本。

    7.3 脚本权限问题

    要加/bin/sh执行,也可以不在定时任务中用/bin/sh就要给脚本可执行权限。

    7.4 时间变量问题

    “%”百分号在crontab任务中认为是newline,需要用“”转义。crontab任务命令中,如果有“date +%Y%m%d%H%M”(或date +%Y-%m-%d-%H:%M),必须替换为“date +%Y%m%d%H%M”,但写在脚本中的“%”百分号就不需要转义了。

    7.5 定时任务加注释

    写定时任务要加上注释如:什么人,什么时间,因为谁,做了什么事都要标记清楚如谁与2018-08-01日在http服务器上做了10分钟同步的操作。

    7.6 使用脚本程序替代命令

    使用脚本执行任务可以减少错误,提升效率,规范,是个好习惯。

    7.7 定时任务脚本的问题

    定时任务脚本中的程序命令尽量用全路径。

    8.生产环境定时任务重现生产no space left

    企业inode被填满的企业案例

    问题:修改用户密码和添加用户时出现下面错误,但是用df –h发现磁盘没满,请问为什么?

     1、修改密码时报错 passwd: Authentication token manipulation error 2、添加用户报错:unable to lock password file

    分析思路:查看/etc/passwd和/etc/shadow的文件权限没有问题,再使用命令strace -f passwd 追踪分析原因,看到关键报错信息:“No space left on device”。最后用df -hi查看发现根分区的inode满了。

    解决办法:

    (1 打开邮件服务,打开邮件服务就把邮件目录清空了不要直接删除文件,生产环境邮件服务是不开的。

    (2 在定时任务最后加>/dev/null 2>&1将输出内容定义到空。这样就不会产生垃圾文件了。

    转载地址:https://blog.51cto.com/10642812/2280981

    博客作者海风掠过的原创作品

    展开全文
  • linux定时任务

    2020-12-29 07:57:30
    第1章 定时任务介绍1.1 什么是定时任务?crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件。一般情况下,我们按装完操作系统后,默认遍会...变会根据埼玉县设定的定时任务规则执行该定时任务。...

    第1章 定时任务介绍

    1.1 什么是定时任务?

    crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件。一般情况下,我们按装完操作系统后,默认遍会启动crond服务调度服务,在我们面前的系统安装及开机启动优化设置中,我们也设置保留了crond开机启动。crond服务会定期(默认每分钟检查一次)检查系统中是否有要执行的任务工作。如果有。变会根据埼玉县设定的定时任务规则执行该定时任务。这个crond定时任务就相当于我们平时早起使用的闹钟一样。

    特殊需求:crond服务搞不定了(如任务精确到秒),一般工作中写脚本守护进程执行。

    这里要求理解进程、程序、守护进程之前的关系。

    1.2 linux系统crond的定时任务

    linux系统中定时任务调度工作可以分为以下两种情况:

    1.2.1 linux系统自身定期执行的任务工作:

    系统周期性自行执行的任务工作,如轮询系统日志、备份系统数据、清理系统缓存等,这些任务无需我们认为干预。如:

    [root@oldboy ~]# ll /var/log/messages*

    -rw-------  1root root  838513 Sep  8 23:52 /var/log/messages

    -rw-------. 1 root root  496687 Aug 14 19:59/var/log/messages-20160814

    -rw-------. 1 root root 1614991 Aug 21 12:14/var/log/messages-20160821

    -rw-------  1root root 1419878 Aug 28 08:45 /var/log/messages-20160828

    -rw-------  1root root 1104533 Sep  4 11:22/var/log/messages-20160904

    1.2.2   用户执行的任务工作:

    某个用户或系统管理员定期要做的任务工作,例如每隔5分钟和互联网上时间服务同步(这是安装系统基础优化部分的内容),每天晚上0点备份网站站点数据及数据库数据,一般这些工作需要由每个用户自行设置才行。所谓的用户就是读者或者在做的小伙伴。

    例如:服务器时间同步

    [root@oldboy ~]# crontab -l

    #time sync by hz at 2016-8-19

    */5 * * * * /usr/sbin/ntpdate pool.ntp.org>/dev/null 2>&1

    linux系统下定时任务软件种类

    1.3 linux系统下定时任务软件

    at,crontab,anacron.

    at定时任务,是一种临时性的定时软件,在命令行设置at定时任务,只会执行一次,然后失效。跟windows里cmd中的at定时任务类似。(不常用)

    anacron定时任务,该定时任务可以在系统关机后,将关机期间的没有执行的定时任务在开机的时候自动都执行一遍。然而在生产环境中,服务器是不允许停机的,所以该服务基本上也不会用到。(几乎不用)

    crond定时任务,该服务是生产环境普遍用到的定时任务,可以精确到分钟。在系统优化中的精简开机服务启动项中将该服务保留,开机启动。

    第2章 定时任务crond使用说明

    2.1 指令语法

    crond定时任务的命令为crondtab,常用选项:

    crontab [-u user] file

    crontab [-u user] [-l | -r | -e] [-i] [-s]

    -u(user)执行该定时任务的用户

    -l(list)查看定时任务列表

    -e(edit)编辑定时任务

    2.2 定时任务的文件

    定时任务的执行是由系统每隔一分钟,系统自动扫描一次定时任务的定时文件,如果存在定时任务,就执行相应的命令。

    2.2.1 系统定时任务文件:

    [root@oldboy ~]# cat /etc/crontab

    SHELL=/bin/bash                             #默认编辑器

    PATH=/sbin:/bin:/usr/sbin:/usr/bin          #定时任务中的PATH黄金变量

    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 beexecuted

    系统定时任务有七部分组成:分、时、日、月、周、用户和命令。

    2.2.2 用户的定时任务文件

    用户定时任务文件在/var/spool/cron/下,

    如系统的定时任务文件:

    cat /var/spool/cron/root

    #time sync by hz at 2016-8-19

    */5 * * * * /usr/sbin/ntpdate pool.ntp.org >/dev/null2>&1

    用户的定时任务由六部分组成:分、时、日、月、周、命令。

    查看系统定时任务:

    [root@oldboy ~]#crontab -l

    #time sync by hz at 2016-8-19

    */5 * * * * /usr/sbin/ntpdate pool.ntp.org>/dev/null 2>&1

    编辑系统定时任务:

    [root@oldboy ~]# crontab -e

    #time sync by hz at 2016-8-19

    */5 * * * * /usr/sbin/ntpdate pool.ntp.org>/dev/null 2>&1

    crontab -e编辑定时任务实际上就是将定时任务写到定时任务文件/var/spool/cron/root中,也可以直接将定时任务追加到该文件中。crontab -e的用法好处是系统自动检测语法是否错误。所以初学者建议用此方法。

    2.3 定时任务中的时间表示

    定时任务中的时间是由一些特殊的字符和数字以特殊的排序组成的。符号用法

    **代表“每”的意思,在什么位置上就代表没多长时间。

    如:* * * *  *   表示每分钟

    00 * * * * 表示每小时的整点

    ,“,”表示间隔的时间,当时间不连续时,可以用逗号分隔开

    如:15,30,45 *  * * *   表示每小时的第15、30、45分钟时执行命令。

    -“-”可以用来表示连续的时间段,从某一时间开始到某一时间结束。

    如:00  23,01-07 * * *  表示每天的晚上23点到第二天早上的7点的整点执行命令。

    /“/”表示每隔的意思,就是每隔多长时间。

    如*/5 * * * *   表示每隔5分钟执行一次命令

    注意与*的区别

    第3章 定时任务案例练习

    实例3-1

    每隔五分钟同步一次系统的时间

    /5 * * * * /usr/sbin/ntpdate pool.ntp.org>/dev/null 2>&1

    实例3-2

    每分钟执行一次脚本/server/scripts/tar.sh

    * * * * * /bin/sh /server/scripts/tar.sh>/dev/null 2>&1

    实例3-3

    每天晚上12点执行脚本/bin/sh/server/scripts/tar_html.sh

    00 00 * * * /bin/sh /bin/sh/server/scripts/tar_html.sh >/dev/null 2>&1

    实例3-4

    每个月的4号和每周的周一至周三的上午11点整重启Apache服务

    00 11 4 * 1-3 /oldboy/weberber/apache/bin/apachectl restart

    实例3-5

    *23,00-07/1 * * * /application/apache/bin/apachectlgraceful

    以上不是表示每天晚上的23点到第二天的早上七点每小时重启一次Apache服务。

    实际表达的意思是每分钟执行一次命令

    若要表示每小时执行一次重启服务的正确写法是:

    00 23,00-07/1 * * * /application/apache/bin/apachectl graceful

    第4章 企业书写定时任务规范

    在生产环境中,操作正确的重要性是不言而喻的。为了避免操作中的失误,规范的操作流程是做到减少失误的有效方法,下面以一个生产环境的案例来说明一下操作的正确流程。

    4.1 实例演示规范操作

    实例4-1规范定时任务案例:

    每分钟打包备份/etc/services文件一次到/tmp目录下,要求打包文件不被覆盖。

    1、在命令行下测试成功

    [root@oldboy ~]# cd /etc/

    [root@oldboy /etc]# tar -zcf/tmp/services_backup$(date +%F-%H-%M).tar.gz services

    [root@oldboy /etc]# ls/tmp/services_backup2016-09-09-22-37.tar.gz

    /tmp/services_backup2016-09-09-22-37.tar.gz

    2、将执行命令写入脚本

    [root@oldboy ~]# mkdir -p /server/scripts/

    [root@oldboy /etc]# vim/server/scripts/backup_services.sh

    1#!/bin/bash

    2 cd /etc/&&\

    3 /bin/tar-zcf /tmp/services_backup$(date +%F-%H-%M).tar.gz services

    将前面执行成功的命令复制到脚本中,防止手动敲错。

    3、测试脚本

    [root@oldboy /etc]# /bin/sh/server/scripts/backup_services.sh

    [root@oldboy /etc]# ls/tmp/services_backup2016-09-09-22-*

    /tmp/services_backup2016-09-09-22-37.tar.gz

    /tmp/services_backup2016-09-09-22-43.tar.gz

    测试脚本时要用全路径,测试完成注意查看测试结果

    4、编写定时任务

    [root@oldboy /etc]# crontab -l |tail -2

    #backup services by crh at 2016-09-09

    * * * * * /bin/sh/server/scripts/backup_services.sh >/dev/null 2>&1

    注意定时任务的时间书写格式,以及业务要求中的时间;

    定时任务的命令要执行直接复制命令行中执行脚本的命令;

    定时任务中执行脚本后结果记得定向到/dev/null中;

    写完定时任务注意查看是否正确。

    5、查看定时任务执行效果

    [root@oldboy /etc]# ls/tmp/services_backup2016-09-09-22-*

    /tmp/services_backup2016-09-09-22-49.tar.gz

    /tmp/services_backup2016-09-09-22-50.tar.gz

    /tmp/services_backup2016-09-09-22-51.tar.gz

    /tmp/services_backup2016-09-09-22-52.tar.gz

    /tmp/services_backup2016-09-09-22-53.tar.gz

    [root@oldboy /etc]# tail -f /var/log/cron

    …………

    Sep  922:50:01 oldboy CROND[1542]: (root) CMD (/usr/lib64/sa/sa1 1 1)

    Sep  922:51:01 oldboy CROND[1551]: (root) CMD (/bin/sh/server/scripts/backup_services.sh >/dev/null 2>&1)

    Sep  922:52:01 oldboy CROND[1557]: (root) CMD (/bin/sh/server/scripts/backup_services.sh >/dev/null 2>&1)

    Sep  922:53:01 oldboy CROND[1563]: (root) CMD (/bin/sh/server/scripts/backup_services.sh >/dev/null 2>&1)

    查看执行的结果是否正确;

    跟踪定时任务日志tail -f /var/log/cron查看状态。

    6、尽量多环境测试后在上产线。

    个人的虚拟机测试à办公室环境测试àIDC机房测试àIDC正式环境

    4.2 定时任务规范操作步骤:

    1、在命令行下测试成功

    2、将执行命令写入脚本

    3、测试脚本

    4、编写定时任务

    5、查看定时任务执行效果

    6、尽量多环境测试后在上产线。

    4.3 定时任务规范习惯

    1、注释【规范和习惯】

    2、命令放脚本文件里

    3、进入目标的上级目录打包

    4、命令在命令行测试好,然后复制后放入脚本

    5、脚本文件要放在固定的规范的目录/server/scripts

    6、取消tar命令及脚本的无用输出

    7、脚本名字用.sh结尾

    8、脚本前面要用/bin/sh执行脚本,并且脚本也要全路径

    9、复制执行的全路径的脚本到定时任务里配置,或者配置好定时任务后,复制定时任务命令到命令行测试。

    10、定时任务的结尾要加上>/dev/null 2>&1

    第5章 企业案例

    5.1 企业案例:inode被填满的企业案例子。

    邮件消息队列文件

    CentOS5   /var/spool/clientmquenue/

    CentOS6      /var/spool/postfix/maildrop/

    和定时任务相关的原因:

    在定时任务中,定时任务执行出现错误,但是有没有讲错误输出定向到/dev/null中,而且系统中的邮件服务有没有开启,导致系统报错小文件堆积在邮件消息队列文件下,占用完系统的inode。

    解决办法:

    1、将邮件服务打开,

    2、将定时任务的结果定向到/dev/null

    5.2linux定时任务生产java服务无法执行问题群友案例

    分析:

    conrd定时任务中的环境变量只包含了系统中的小部分,在执行命令的时候如果没有加全路径或将环境变量加入到脚本中,就会导致定时任务执行失败。所以在定时任务中执行的命令要加上全路径。在特殊情况下(Java)要将环境变量导入到执行的脚本中。使得定时任务能够正确执行。

    展开全文
  • 网站权限-通过控制权限让网站安全 linux默认的权限① : 主人 家人 陌生人文件的权限: rw- r-- r-- 644目录的权限: rwx r-x r-x 755② :让文件或者目录的所有者和家组属于 root root目的 更安全 → 文件 644 root ...
  • linux定时任务设置

    2022-05-23 14:16:44
    1、进入设置定时任务 crontab -e 前面*是时间 后面路径是脚本 2、设置时间规则 *(分)*(时)*(天)*(月)*(周) 每五分钟执行*/5**** 每小时执行0**** 每天执行00*** 每周执行00**0 每月执行001** 每年执行...
  • Linux crond定时任务

    2021-05-11 22:50:35
    第1章 Crond是什么?Crond是linux系统用来定期执行命令或指定程序任务的一种服务或...如果有,便会根据其预先设定的定时任务规则自动执行该定时任务工作。这个Crond定时任务服务就相当于我们早上使用的闹钟一样。第...
  • 前言 linux 系统是由 crond这个系统服务来控制...另外, 由于使用者自己也可以设置计划任务,所以, Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令。 crontab 作用:添加,查询,删除系统计划任务的指令。
  • crontab 设置定时任务linux
  • Linux配置定时任务

    千次阅读 2022-03-17 19:59:33
    主要介绍Linux中如何使用crondtab工具,包含crondtab定时任务的时间配置以及定时发送get和post请求的方式。
  • Linux 定时任务不生效的问题

    千次阅读 2021-01-17 15:27:32
    Linux定时任务不生效的问题屡见不鲜, 本质原因是: 登录式 shell & 非登录式 shell.登录式 shell & 非登录式 shell登录式 shell 有:su - Login: username / password非登录式 shellsu 图形见面脚本执行...
  • Crond服务会定期(默认每分钟检查一次)检查系统中是否有要执行的任务工作,如果有,便会根据其预先设定的定时任务规则自动执行该定时任务工作,这个crond定时任务服务就相当于我们平时早起使用的闹钟一样。...
  • linux系统添加定时任务

    千次阅读 2021-05-17 22:04:47
    一、业务需求:将一个普通的java项目打包(此处是jar包),上传到linux服务器上面,要求通过定时器,每分钟去检测一次该服务是否一直再跑,如果进程不在,就重新启动该服务,如果进程还在,就不做处理。。。。二、具体...
  • linux定时任务(crontab)

    千次阅读 2021-02-23 10:53:19
    linux crontab定时任务 ,crontab发送邮件
  • Linux服务器定时任务

    千次阅读 2021-05-10 09:04:58
    crontab命令用于设置周期...键入 crontab -e 编辑crontab服务文件,在这个文件内输入定时任务执行语句,按照下面的格式要求 image.png*******************循环执行时间*******************************/5 * * * * /a...
  • linux 系统定时任务

    2022-01-14 09:07:59
    在终端输入crontab -l 命令查看当前用户已启动的定时任务。如下是我mac里面设定的,规则是每分钟去请求一下本地的http://test.test.com:8071/index/TimeTask/singleTransferQuery接口,然后把请求返回的数据写到/...
  • Linux定时任务每10分钟运行一次

    万次阅读 2019-10-30 15:24:19
    crontab */10 * * * * 在线工具 在线展示crontab命令结果
  • 无论你学习什么开发语言,Python ...可以使用crontab定时处理离线任务,比如每天凌晨2点更新数据等,经常用于系统任务调度。 服务启动和关闭 一般Linux系统中都会装有crontab,如果没有安装可以使用包管理工具安装:
  • Linux命令之执行定时任务crontab

    千次阅读 2022-05-26 15:44:09
    `crontab` 命令是用来定期执行程序的命令,即执行定时任务
  • Linux定时任务

    2021-05-11 20:47:52
    Crond服务会定期(默认每分钟检查一次)检查系统中是否有要执行的任务工作,如果有,便会根据其预先设定的定时任务规则自动执行该定时任务工作,这个crond定时任务服务就相当于我们平时早起使用的闹...
  • Linux系统定时任务

    2020-10-04 00:28:19
    一、at 一次性执行定时任务 1. at 服务管理与访问控制 查看 at 软件包是否已安装 [root@localhost ~]$ rpm -a at at命令要想正确执行,需要atd服务的支持。atd服务是独立的服务,所以启动的命令是: [root@localhost...
  • Linux下添加定时任务

    2021-05-13 04:26:59
    很多时候需要代码定时定点去执行,比如说写了一段爬取网站信息的代码,想每天早上进行一次爬取,就需要为系统添加计划任务。而在Linux系统下,系统计划任务可以通过crond来实现。那么crond是什么呢,以下摘录自网络...
  • 2.添加定时任务 有两种方法 a.修改文件 vim /etc/crontab 然后添加定时任务,注意环境变量和用户信息, 脚本无法执行问题 如果我们使用 crontab 来定时执行脚本,无法执行,但是如果直接通过命令(如:./test.sh)...
  • 总所周知,linux的crontab定时任务最高只能执行到分钟级别,每分钟进行执行指定脚本。 但是,有很多时候我们进行统计操作的时候,需要执行的频率比较高,达到秒级。 接下来,整理下秒级的定时任务的开启 1、进入...
  • linux 定时任务1.创建可执行的shell文件2.添加定时任务 1.创建可执行的shell文件 命令 说明 touch ProofVpsTime.sh 创建一个shell脚本 vi ProofVpsTime.sh 编辑内容 即上图#! /bin/bash 部分的内容 ...
  • 计划任务分类二、计划任务管理三、实现四、定时任务结合发送邮件五、crontab不执行的问题六、定时任务练习七、拒绝特定用户使用定时任务八 、定时任务编写思路九、计划任务备份十、 总结 一、计划任务基本概念 1....
  • 在当前用户下,开始编辑定时任务 crontab -e 按键 i 进入编辑模式 每分钟执行一次特定的shell脚本 */1 * * * * /***/*****.sh 按键 Esc 退出编辑模式,输入 wq 保存退出
  • Linux定时任务crontab

    千次阅读 2021-05-11 05:11:26
    Linux或类Unix系统中,通常使用 crontab 命令在指定的时间执行一个shell脚本或者一系列Linux命令,也就是通常所说的定时任务。一、cron 进程在详细介绍crontab之前,必须要说一下 cron 进程。1、cron进程是linux中...
  • 前段时间将Linux开发板上的符合AC97音频规范的WM9714声卡配起来了,并将ALSA库编译拷贝到文件系统中。本来想做一个基于DLNA网络协议的数字媒体播放器,想通过手机控制嵌入式设备播放音乐的功能,但是基于网络上资料...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,049
精华内容 9,219
关键字:

linux 定时任务规则