• Linux系统定时任务crond那些事


    1 Linux系统定时任务

    1.1 定时任务介绍

    1.1.1 Crond是什么?

    Crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件。Centos5/6 linux系统安装完操作系统默认会启动crond任务调度服务,系统开机启动优化保留crond服务开机自启动。
    Crond服务定期(默认是每分钟检查一次)检查系统中是否有要执行的任务工作。这个crond定时任务服务就相当于我们平时使用的闹钟一样。特殊需求:(秒级别)crond服务搞不定了,工作中一般写脚本守护程序执行。

    1.1.2 程序文件和进程说明

    程序文件:程序代码组成,但是没有在计算机内执行,即当前没有执行
    进程:所谓的进程就是计算机中正在执行的程序
    守护程序或守护进程:守护进程就是一直运行的程序(linux运行必须要启动的程序)

    操作命令:

    #linux优化内容,保留sshd|network|rsyslog|crond|sysstat这五个服务
    [root@oldboy oldboy]# chkconfig --list | grep "3:on" | grep -Ev "sshd|network|rsyslog|crond|sysstat" | awk '{print "chkconfig",$1,"off"}'| bash
    #查看linux系统当前正在运行的服务
    [root@oldboy oldboy]# chkconfig --list | grep "3:on"  
    crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off
    network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
    rsyslog         0:off   1:off   2:on    3:on    4:on    5:on    6:off
    sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
    sysstat         0:off   1:on    2:on    3:on    4:on    5:on    6:off

    1.1.3 不同系统定时任务的分类

    windows 7 系统的定时任务

    开始→所有程序→附件→系统工具→选择任务计划程序

    Linux系统的定时任务

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

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

    [root@oldboy mail]# ls -l /var/log/messages*    ->系统日志
    -rw------- 1 root root 416686 Apr 30 12:41 /var/log/messages
    -rw------- 1 root root 403072 Apr  9 19:41 /var/log/messages-20180409
    -rw------- 1 root root 604646 Apr 14 19:15 /var/log/messages-20180415
    -rw------- 1 root root 546051 Apr 22 01:00 /var/log/messages-20180422
    -rw------- 1 root root 719102 Apr 29 15:06 /var/log/messages-20180429
    [root@oldboy mail]# ls -l /var/log/secure*    ->安全日志
    -rw------- 1 root root  8957 Apr 30 12:41 /var/log/secure
    -rw------- 1 root root  7237 Apr  9 20:31 /var/log/secure-20180409
    -rw------- 1 root root 21111 Apr 15 01:32 /var/log/secure-20180415
    -rw------- 1 root root 11403 Apr 22 01:06 /var/log/secure-20180422
    -rw------- 1 root root 15812 Apr 29 16:11 /var/log/secure-20180429

    说明:像这样的工作是由系统自身来完成的,不需要系统管理员来设置

    系统自动轮询任务的设置配置路径:

    [root@oldboy mail]# ls -l /etc/ | grep "cron"
    -rw-------.  1 root root    541 Nov 23  2013 anacrontab
    drwxr-xr-x.  2 root root   4096 Mar 24 21:40 cron.d
    drwxr-xr-x.  2 root root   4096 Mar 24 21:40 cron.daily
    -rw-------.  1 root root      0 Nov 23  2013 cron.deny
    drwxr-xr-x.  2 root root   4096 Mar 24 21:39 cron.hourly
    drwxr-xr-x.  2 root root   4096 Mar 24 21:40 cron.monthly
    drwxr-xr-x.  2 root root   4096 Sep 27  2011 cron.weekly
    -rw-r--r--.  1 root root    457 Sep 27  2011 crontab
    [root@oldboy mail]# cd /etc/logrotate.d/
    [root@oldboy logrotate.d]# ls
    dracut  httpd  psacct  syslog  vsftpd  yum
    [root@oldboy logrotate.d]# vim syslog 
    /var/log/cron
    /var/log/maillog
    /var/log/messages
    /var/log/secure
    /var/log/spooler
    {
        sharedscripts
        postrotate
            /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
        endscript
    }
    ~                                                                                  
    设置文件:/etc/logrotate.conf

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

    [root@oldboy ~]# which ntpdate  ->查看ntpdate二进制命令所在路径
    /usr/sbin/ntpdate
    [root@oldboy ~]# ps -ef | grep ntpdate
    root       3276   2534  0 16:06 pts/3    00:00:00 grep --color=auto ntpdate
    [root@oldboy ~]# crontab -l |tail -2     
    #time sync by Wolf_Dreams 2018-05-01
    */5 * * * * /usr/sbin/ntpdate time1.aliyun.com > /dev/null 2>&1
    补充说明(阿里云公共NTP服务器):
    1)    Unix类系统:time1-7.aliyun.com
    2)    Windows: time.pool.aliyun.com

    1.2 定时任务crond使用说明

    1.2.1 Crontab命令语法(标黄代表常用选项参数)

    名称描述:
    crontab - maintain crontab files for individual users
    使用格式:
    crontab [-u user] file
    crontab [-u user] [-l | -r | -e] [-i] [-s]
    选项参数说明:
    -u    指定用户名
    -e    使用编辑器创建定时任务
    -l    显示目前设置的定时任务
    -r    删除定时任务
    -i    删除定时任务给出确认是否删除的提示信息
    -s    selinux security context

    1.2.2 Crontab指令说明

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

    1.2.3 Crontab配置文件默认存放目录

    文件

    说明

    /var/spool/cron

    所有用户crontab配置文件默认都存放在此目录,文件名以哪个用户创建定时任务就以哪个用户名命名

    ^_^

    [root@oldboy cron]# cat /var/spool/cron/root

    #echo + oldboy.log file by wolf_dreams 2018-05-01

    #*/1 * * * * echo "+" > /root/oldboy/oldboy.log

    ####tar ***/etc/services

    00 */2 * * * /bin/sh /root/oldboy/backup_service.sh > /dev/null 2>&1

    ###tar /var/www/html file /data

    #00 00 * * * /bin/sh /root/oldboy/backup_html.sh > /dev/null 2>&1

    ###remove /data directory *.tar.gz files

    00 00 * * * /bin/sh /root/oldboy/remove_backup.sh > /dev/null 2>&1

    #time sync by Wolf_Dreams 2018-05-01

    */5 * * * * /usr/sbin/ntpdate time1.aliyun.com > /dev/null 2>&1

    通过crontab查看或编辑的定时任务规则默认都会放到/var/spool/cron/目录下,以当前用户命令的文件

    /etc/cron.deny

    定时任务也可以针对普通用户设置,可以在/etc/cron.deny设置禁止执行定时任务的用户(即不允许使用crontab命令)

    补充说明:

    [root@oldboy ~]# crontab -e   ===  vi /var/spool/cron/root

    [root@oldboy ~]# crontab -l    ===  cat /var/spool/cron/root

    1.2.4 crontab指令选项说明含义表

    参数

    含义

    指定示例

    -l(字母)

    查看crontab文件内容,可理解成list缩写

    crontab -l

    -e

    编辑crontab文件内容,可理解成edit的缩写

    crontab -e

    -i

    删除crontab文件内容,删除前会提示确认,很少用

    crontab -ri

    -r

    删除crontab文件内容,很少用

    crontab -r

    -u user

    指定使用用户执行定时任务

    crontab -u gandalf -l

    提示:crontab{-l |-e}实际上就是在操作/var/spool/cron/当前用户这样的文件

    特别提醒(两个特殊配置文件的对比说明):

    crontab -e

    /var/spool/cron/root

    crontab –e编辑会检查语法,而直接使用echo,vi编辑配置不会检查语法

    visudo

    /etc/sudoers

    visudo编辑会检查语法,而直接使用echo,vi编辑配置不会检查语法

    说明:有些人可能会直接编辑/etc/crontab配置文件来设置定时任务,没有必要使用这种配置方法,来配置定时任务,例子如下:

    [root@oldboy ~]# cat /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

    1.2.5 crontab指令使用格式

    默认情况下,当用户建立定时任务规则后,该规则记录对应的配置文件会存在于/var/spool/cron中,其crontab配置文件对应的文件名与登录的用户名一致,如:root用户的定时任务配置文件为/var/spool/cron/root。
    crontab定时任务的书写格式很简单,用户的定时任务规则一般分为6个段(每个段通过空格来分隔,系统的定时任务为/etc/crontab,分为7段,空格来分隔),前五段为时间的设定段,第六段为所要执行的命令或脚本任务段

    用户定时任务基本格式如下:

    01 * * * * cmd
    02 4 * * * cmd
    22 4 * * 0 cmd
    42 4 1 * * cmd
    分 时 日 月 周 任务

    1.2.6 crontab语法格式中时间段的含义

    段    含义    取值范围(整数)
    第一段    代表分钟    00-59
    第二段    代表小时    00-23
    第三段    代表日,天    01-31
    第四段    代表月份    01-12
    第五段    代表星期,周几    0-7(0和7都代表星期日)
    提示:时间记忆口诀:分时日月周,取值范围:正常日期时间范围

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

    特殊符号

    含义

    *

    *号表示任意时间都,就是“每”的意思,举例:如00 01 * * * cmd表示每月每周每日的凌晨1点执行cmd任务。

    -

    减号,表示分隔符,表示一个时间范围段,如17-19点,每小时的00分执行任务。00 17-19 * * * cmd。就是17,18,19点整点分别执行的意思。

    ,

    逗号,表示分隔时间段的意思。30 17,18,19 * * * cmd 表示每天17,18,19点的半点执行cmd。也可以和“-”结合使用,如: 30 3-5,17-19 * * * cmd。

    /n

    n代表数字,即”每隔n单位时间”,例如:每10分钟执行一次任务可以写 */10 * * * * cmd,其中 */10,*的范围是0-59,也可以写成0-59/10。

    1.2.8 Crontab编辑定时任务依赖的服务

    [root@oldboy ~]# chkconfig --list crond 
    crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off
    [root@oldboy ~]# /etc/init.d/crond status
    crond (pid  1412) is running...
    [root@oldboy ~]# ps -ef | grep crond | grep -v grep
    root       1412      1  0 10:29 ?        00:00:00 crond
    [root@oldboy ~]# /etc/init.d/crond restart
    Stopping crond:                                            [  OK  ]
    Starting crond:                                            [  OK  ]
    提示:安装完Centos系统后开机启动任务优化,要保留crond定时任务的服务

    1.3 定时任务crond案例

    示例一:

    30 3,12 * * * /bin/sh /scripts/oldboy.sh
    本例中,第一列为30,表示30分钟,第二列为3,12,表示凌晨3点及中午12点,此定时任务的意思是每天凌晨3点和中午12点的半点时刻(或每天凌晨3:30和中午12:30)执行/scripts/oldboy.sh脚本

    示例二:

    30 */6 * * * /bin/sh /scripts/oldboy.sh
    本例中,第一列为30,表示30分钟,第二列为*/6,表示每6个小时,也相当于6,12,18,24的作用,此定时任务的意思是每隔6个小时的半点时刻执行/scripts/oldboy.sh脚本

    示例三:

    30 8-18/2 * * * /bin/sh /scripts/oldboy.sh
    本例中,第一列为30,表示30分钟,第二列为8-18/2,表示从早上8点到下午18点之间每隔2个小时,也相当于8,10,12,14,16,18单独列出的作用,此定时任务的意思是早上8点到下午18点之间
    每隔2个小时的半点时刻执行/scripts/oldboy.sh脚本

    示例四:

    30 21 * * * /etc/init.d/httpd restart
    本例中表示每晚的21:30重启apache服务

    示例五:

    45 4 1,10,22 * * /etc/init.d/httpd restart
    本例中表示每月1、10、22日的凌晨4:45分重启apache服务

    示例六:

    10 1 * * 6,0 /etc/init.d/httpd restart
    本例中表示每周六、周日的凌晨1:10分重启apache服务

    示例七:

    0,30 18-23 * * * /etc/init.d/httpd restart
    本例中表示每天18:00到23:00之间每隔30分钟重启apache服务
    提示:最后一次执行任务的时间是23:30

    示例八:

    00 */1 * * * /etc/init.d/httpd restart
    本例中表示每隔一个小时整点重启apache服务

    示例九(错误的定时任务写法):

    * 23,00-07/1 * * * /etc/init.d/httpd restart
    本例中并不表示晚上23点和早上0-7点之间每隔一个小时重启apache服务
    提示:以上的结果是不规范的,也是不对的
    以上的定时任务的第一列为*,表示每分钟都执行任务即晚上23点和早上0-7点之间每隔一小时的每分钟都重启apache服务

    示例十:

    00 11 * 4 1-3 /etc/init.d/httpd restart
    本例中表示表示4月的每周一到周三的上午11点整重启apache服务
    强调:周和日不要同时使用,否则可能达不到想要的效果

    1.4 书写crond定时任务7个基本要领

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

    添加注释就知道每一个定时任务运行的是什么作业,以防以后混乱,切记这个习惯和规范

    [root@oldboy ~]# crontab -l
    #time sync by Wolf_Dreams 2018-05-01
    */5 * * * * /usr/sbin/ntpdate time1.aliyun.com > /dev/null 2>&1

    1.4.2 定时任务命令或程序最好写到脚本里面执行

    [root@oldboy ~]# crontab –l
    ###tar /var/www/html file /data
    00 00 * * * /bin/sh /root/oldboy/backup_html.sh > /dev/null 2>&1

    1.4.3 定时任务执行的脚本要规范路径

    [root@oldboy ~]# crontab –l
    ###tar /var/www/html file /data
    00 00 * * * /bin/sh /root/oldboy/backup_html.sh > /dev/null 2>&1

    1.4.4 执行shell脚本任务时前面加/bin/sh

    执行定时任务时,如果是执行脚本,尽量在脚本前面加上/bin/sh(sh二进制命令的绝对路径),否则有可能忘了为脚本设定执行权限,从而无法完成任务

    [root@oldboy ~]# crontab –l
    ###tar /var/www/html file /data
    00 00 * * * /bin/sh /root/oldboy/backup_html.sh > /dev/null 2>&1

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

    [root@oldboy ~]# crontab –l
    ###tar /var/www/html file /data
    00 00 * * * /bin/sh /root/oldboy/backup_html.sh > /dev/null 2>&1
    1.4.5.1 有关/dev/null的说明

    /dev/null为特殊的字符设备文件,表示黑洞设备或空设备

    [root@oldboy ~]# ls -l /dev/null
    crw-rw-rw- 1 root root 1, 3 May  1 10:28 /dev/null
    1.4.5.2 有关重定向的说明
    >或1>   输出重定向:把前面输出的东西输入到后边的文件中,会删除文件原有内容。
    >>或1>>追加重定向:把前面输出的东西追加到后边的文件中,不会删除文件原有内容。
    <或<0   输入重定向:输入重定向用于改变命令的输入,指定输入内容,后跟文件名。
    <<或<<0输入重定向:后跟字符串,用来表示“输入结束”,也可用ctrl+d来结束输入。
    2>       错误重定向:把错误信息输入到后边的文件中,会删除文件原有内容。
    2>>     错误追加重定向:把错误信息追加到后边的文件中,不会删除文件原有内容。
    标准输入(stdin):代码为0,使用<或<<。
    标准输出(stdout):代码为1,使用>或>>。正常的输出。
    标准错误输出(sederr):代码为2,使用2>或2>>。
    特殊:
    2>&1就是把标准错误重定向到标准输出(>&)。
    >/dev/null 2>&1 等价于 1>/dev/null  2>/dev/null
    1.4.5.3 >/dev/null 2>&1的作用
    如果定时任务规范结尾不加 >/dev/null 2>&1,很容易导致硬盘inode(索引节点)空间被占满,会出现no space left on device提示信息,从而导致系统服务不正常(如果系统是centos 5版本默认安装sendmail,
    var/spool/clientmqueue邮件临时队列目录,垃圾文件存放于此,如果系统是centos 6版本,默认不装sendmail服务,但是默认安装postfix服务且处于开启状态,垃圾文件存放目录是:/var/spool/postfix
    /maildrop) 提示:/var/spool/postfix/maildrop产生大量的垃圾小文件,是因为crond定时任务服务与邮件服务是相关联的,执行定时任务要向定义定时任务的用户发送邮件(邮件内容cron执行脚本中的output和warning信息),
    当postfix服务处于关闭状态的时候,cron服务发送邮件就发不出去,就会大量堆在/var/spool/postfix/maildrop目录

    Linux系统Centos6.5版本邮件服务postfix,默认是开启状态):

    [root@oldboy ~]# ps -ef | grep postfix | grep -v grep
    root       1348      1  0 10:29 ?        00:00:00 /usr/libexec/postfix/master
    postfix    1358   1348  0 10:29 ?        00:00:00 qmgr -l -t fifo -u
    postfix    2741   1348  0 14:17 ?        00:00:00 pickup -l -t fifo -u
    [root@oldboy ~]# lsof -i :25
    COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    master  1348 root   12u  IPv4  11032      0t0  TCP localhost:smtp (LISTEN)
    master  1348 root   13u  IPv6  11034      0t0  TCP localhost:smtp (LISTEN)
    [root@oldboy maildrop]# /etc/init.d/postfix status
    master (pid  1348) is running...

    问题表现和检查方法:

    1、运行df –i查看inode空间使用是否满了

    [root@oldboy ~]# df -i
    Filesystem     Inodes IUsed  IFree IUse% Mounted on
    /dev/sda3      577088 53322 523766   10% /
    tmpfs           60785     1  60784    1% /dev/shm
    /dev/sda1       51200    38  51162    1% /boot
    /dev/sr0            0     0      0     - /mnt

    2、查看/var/spool/postfix/maildrop/目录是否有非常多的小文件,ls命令查看出现直接卡死等情况

    [root@oldboy ~]# ls -l /var/spool/postfix/maildrop/

    索引节点inode空间占满的解决办法:

    第一种办法:重启postfix邮件服务,来释放inode空间

    [root@oldboy maildrop]# /etc/init.d/postfix restart
    Shutting down postfix:                                     [  OK  ]
    Starting postfix:                                          [  OK  ]
    或者采用”vi /etc/crontab” 修改crontab定时任务配置文件
    将‘MAILTO=root’替换成‘MAILTO=""’,然后service crond restart即可;如果还不行在crontab –e第一行直接增加MAILTO=""

    第二种办法:删除/var/spool/postfix/maildrop目录下的文件

    [root@oldboy ~]# cd /var/spool/postfix/maildrop
    [root@oldboy maildrop]# ls | xargs rm –rf
    或者使用find查找并删除文件
    [root@oldboy ~]# find /var/spool/postfix/maildrop/ -type f | xargs rm -rf

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

    这里要特别注意不同用户的环境变量问题,如果是调用了系统环境变量/etc/profile,最好在程序脚本中将用到的环境变量重新export下。

    1.4.7 生产任务程序不要随意打印输出信息

    在调试好脚本程序后,应尽量把DEBUG及命令输出的内容信息屏蔽掉,如果确实需要输出日志,可定向到日志文件里,避免产生系统垃圾。

    1.4.8 配置定时任务规范操作过程

        首先要在命令行操作成功,然后复制成功的命令到脚本里,在各个细小环境减少出错的机会。
        然后测试脚本,测试成功后,复制脚本的规范路径到定时任务配置里,不要手敲。
        先在测试环境下测试,然后正式环境规范部署。

    1.5 生产场景如何调试crond定时任务

    规范的公司开发和运维人员操作流程:个人的开发配置环境-->办公室的测试环境-->idc机房的测试环境-->idc机房的正式环境(分组,灰度发布)

    1.5.1 增加执行频率调试任务

    在调试时,把任务执行频率调快,比如每分钟或者系统时间之后5分钟执行,看结果执行是否可以正确执行,如果正常,那就没问题了,再改成需要的任务的执行时间
    注意:有些任务时不允许频繁执行的,例如:定时往数据库里插入数据,这样的任务要在测试机上测试好,然后正式线上出问题的机会就少了。

    1.5.2 调整系统时间调试任务(不能直接用于生产环境)

    用正确的执行任务的时间,设置完成后,可以修改下系统当前时间,改成任务执行时间的前几分钟来测试(或者重启定时任务服务)

    1.5.3 通过脚本日志输出调试定时任务

    在脚本中加入日志输出,然后把输出打到指定的日志中,然后观察日志内容的结果,看是否正确执行,如下面例子中标绿部分/tmp/crontab.log(脚本日志)
    [root@oldboy ~]# crontab -l
    #time sync by Wolf_Dreams 2018-05-01
    */5 * * * * /usr/sbin/ntpdate time1.aliyun.com > /tmp/crontab.log

    1.5.4 注意一些任务命令带来的问题

    注意: */1 * * * * echo "+" > /root/oldboy/oldboy.log >/dev/null 2>&1这里隐藏的无法正确执行的任务配置,原因是前面多了>,或者去掉结尾的 >/dev/null 2>&1
    (定时任务中重定向输出只能使用一次,不能使用两次或多次) 正确写法: [root@oldboy ~]# crontab -l #echo + oldboy.log file by wolf_dreams 2018-05-01 */1 * * * * echo "+" > /root/oldboy/oldboy.log 错误写法: [root@oldboy ~]# crontab -l #echo + oldboy.log file by wolf_dreams 2018-05-01 */1 * * * * echo "+" > /root/oldboy/oldboy.log > /dev/null 2>&1

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

    在调试java程序任务的时候,注意环境变量,把环境变量的定义加到脚本里
    例子:
    [root@oldboy oldboy]# cat /root/oldboy/task.sh 
    #!/bin/bash
    JAVA_HOME="/opt/jdk1.6.0_18"
    CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    PATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:/opt/nginx-0.7.61/sbin:/opt/jdk1.6.0_18/bin:/opt/resin-3.0.25/bin:$PATH
    export JAVA_HOME PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC CLASSPATH
    /usr/local/bin/xxresin_stop.sh
    /usr/local/bin/xxresin_start.sh

    1.5.6 通过定时任务日志调试定时任务

    [root@oldboy ~]# tail -f /var/log/cron
    May  1 21:45:40 oldboy crontab[3835]: (root) END EDIT (root)
    May  1 21:46:01 oldboy crond[3505]: (root) RELOAD (/var/spool/cron/root)
    May  1 21:46:01 oldboy CROND[3838]: (root) CMD (echo "+" > /root/oldboy/oldboy.log)
    May  1 21:47:01 oldboy CROND[3840]: (root) CMD (echo "+" > /root/oldboy/oldboy.log)
    May  1 21:47:26 oldboy crontab[3841]: (root) BEGIN EDIT (root)
    May  1 21:48:01 oldboy CROND[3844]: (root) CMD (echo "+" > /root/oldboy/oldboy.log)
    May  1 21:49:01 oldboy CROND[3846]: (root) CMD (echo "+" > /root/oldboy/oldboy.log)
    May  1 21:50:01 oldboy CROND[3850]: (root) CMD (/usr/sbin/ntpdate time1.aliyun.com > /dev/null 2>&1)
    May  1 21:50:01 oldboy CROND[3852]: (root) CMD (echo "+" > /root/oldboy/oldboy.log)
    May  1 21:50:01 oldboy CROND[3853]: (root) CMD (/usr/lib64/sa/sa1 1 1)

    1.5.7 sh -x 调试脚本

    [root@oldboy oldboy]# sh -x 
    sh-4.1#  
    sh-4.1# exit
    [root@oldboy oldboy]#
  • 相关阅读:
    RocketMQ 负载均衡
    RocketMQ 介绍及核心概念
    PagView动画
    andriod 视频播放方案
    Andriod 插件化初识
    Android 加载库的方式
    AIDL服务死亡代理
    Android O 创建后台Service
    IntentService
    Activity Dialog 进出动画
  • 原文地址:https://www.cnblogs.com/Wolf-Dreams/p/10693317.html
Copyright © 2020-2023  润新知