Linux定时任务

第1章 定时任务简介 

 cronieLinux下的定时任务服务,服务名称为crond,用来在指定时间或周期性的执行一个指定命令。系统很多默认需要周期性执行的任务都是通过crond实现的。

一般重复且有规律的事交给定时任务

 

1.1  crontab命令是cron table的简写  

    -e      (编辑工作表)

    -l      (列出工作表里的命令)

-r      (删除工作作) 尽量不要用

  crontab  [ -u username] //省略用户表表示操作当前用户的crontab

 

1.2 编写定时任务命令crontab (不推荐使用)

root用户编写   vim /etc/crontab  

 

1.3   ps -ef |grep crond 查询当前定时任务  

 

 

1.4 复制和打包压缩进程  cpu占用率太高会卡,所以要在业务低谷期进行

 

1.5 rpm -ql  cronie  可以rpm查看安装包的内容在哪个文件中

 

1.6 * * * * *  对应 分时日月周  此处有坑 **  00  1 

 

1.7 定时任务分别存放地点,黑名单

/etc/cron.hourly/ 系统每小时运行这里面的内容一次

/etc/cron.daily/ 系统每天运行这里面的内容一次

/etc/cron.weekly/ 系统每周运行这里面的内容一次

/etc/cron.monthly/ 系统每月运行这里面的内容一次

/etc/cron.deny 定时任务的黑名单

/etc/cron.tab 定时任务的配置文件之一

1.8 系统定时任务 +logrotate命令 完成对日志的日志切割/日志轮询

/var/log/cron

/var/log/messages

/var/log/secure

 

1.9 定时任务的相关文件

 

1.9.1 /var/spool/cron/ 定时任务的配置文件所在目录

 

1.9.2 /var/log/cron 中查看日志需使用含义命令(过大)

grep/egrep  

less 上翻下翻f或空格,b

more

tail /tail -f

head  默认查看文件后十行

 

1.10 visudo      /etc/sudoers 

 

/var/spool/cron/root  root是用户名 root用户的定时任务)

一个命令+一个目录

crontab

/var/spool/cron

  

 

1.11 ll /var/log/messages  /var/log/secure 

 

rsyslog  system log  系统服务可以正常记录日志服务

 

[root@oldboyedu-lnb ~]# systemctl is-active crond.service  rsyslog.service

active

active

[root@oldboyedu-lnb ~]# systemctl is-enabled crond.service  rsyslog.service

enabled

enabled

 

[root@oldboyedu-lnb ~]# systemctl start  crond.service  rsyslog.service

[root@oldboyedu-lnb ~]# systemctl enable  crond.service  rsyslog.service

 

1.12 crond服务启动关闭操作守护进程

查看cron服务状态

运用crontab需要启动一个服务crond才行,crond服务通过crontab命令实现 。

 

1.13 查看系统是否启用了crond服务

service crond status

 

1.14 crond的开启和关闭

sudo service crond start //启动服务

sudo service crond stop //关闭服务

sudo service crond restart //重启服务

sudo service crond reload //重新载入配置

 

1.15 显示脚本执行过程

bash -x

sh -x

 

1.16 执行命令过程

1.输入一个命令

2.PATH里面查找 是否有

3.存在 执行

4.不存在 command not found

 

 

 

第2章 定时任务特殊符号

 

2.1    /下划线每隔

2.2    - 6点至8点,十月至十二月

2.3    ,逗号单个并合,例 1,2,3 

 

2.4 每天的上午7点到上午11点 每2小时运行CMD命令 

00 07-11/2 * * *  CMD

* 07-11/2 * * *  CMD

07,09,11

00 06-12/2 * 11 *  /usr/bin/httpd.sh

00 07-11/2 * * *  CMD

00 07,09,11 * * *  CMD

 

ttpd == apache  Linux httpd命令是Apache HTTP服务器程序。

httpdApache HTTP服务器程序。直接执行程序可启动服务器的服务。

nginx    nginx

第3章 定时任务9句箴言 

第一:定时任务规则之前加注释,谁在什么时间做什么

 

第二:使用脚本代替命令行定时任务

超过两条命令用脚本

 

第三:定时任务中的date命令 %百分号有特殊含义,要加 \

 

第四:运行脚本一定要用/bin/shsh

/bin/sh 或者 sh /oldboy/oldboy.sh

文件644  rw-r--r-- oldboy.sh(默认无x权)

 

第五:定时任务中-命令或脚本结果邮件定向到黑洞或追加到文件中

不记录信息     >/dev/null 2>&1   记录执行过程    >>/oldboy/oldboy.txt 2>&1

2>&1 代表不管标准输出还是错误输出都要

如何删除大量小文件 ls *.txt | xargs rm  

 

第六:尽量避免不必要的程序及命令输出

 

第七:打包压缩使用相对路径(切换到目标目录的上一级打包目标)

cd  /

tar zvhf  /...  tar.gz  etc/

 

第八:定时任务中脚本中的程序文件尽量用绝对路径

不加绝对路径用户的定时任务默认存放用户家目录下

系统的定时任务默认放在跟下

第九:系统与命令位置有关的环境变量问题

环境变量: PS1   LANG  

PATH 路径  存放命令目录

定时任务运行脚本的时候可以识别的PATH只有/usr/bin/bin

第九 解决方法

  1. 在脚本开头重新定义一下PATH

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

  1. .  /etc/profole     . 相当于source

 

/dev/null   黑洞  

不记录任何信息  

>/dev/null 2>&1         ===&>/dev/null       ===  1>/dev/null  2>/dev/null

记录执行过程   

>>/tmp/oldboy.txt 2>&1 == &>>/tmp/oldboy.txt == >>/tmp/oldboy.txt 2>>/tmp/oldboy.txt

 

 没有定向到空案例

【企业案例】如果定时任务规则结尾不加>/dev/null 2>&1或者追加到文件中>>/tmp/oldboy 2>&1时间长了很容易导致硬盘inode空间被占满,从而系统服务不正常。

 

定时任务不断给你发邮件

# 邮件服务关闭

定时任务不断给你发邮件  发不出去会堆积

临时存放起来  /var/spool/postfix/maildrop/

 systemctl  stop  postfix.service 临时关闭

 systemctl  disable  postfix.service  禁止开机自启动

 

Removed symlink /etc/systemd/system/multi-user.target.wants/postfix.service.

 

显示脚本执行过程

bash -x

sh -x

 

执行命令过程

1.输入一个命令

2.PATH里面查找 是否有

3.存在 执行

4.不存在 command not found

 

3.1 java环境变量问题 

遇到java的内容,都是用绝对路径

在脚本开头重新定义环境变量

python

go

java

php

tomcat

resin

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

http://oldboy.blog.51cto.com/2561410/1541515

 

posted @ 2018-12-04 14:23  59111618  阅读(278)  评论(0编辑  收藏  举报