天天晚上 12点备份/etc/目录java
tarnode
crond(crontab)定时任务软件(软件包cronie),用的最多的一种linux
atd,应用在只运行一次的任务vim
anacron ,非7*24小时运行的服务器(好比开机多长时间运行,关机多长时间运行)bash
[root@Dao ~]# rpm -qa cronie 查看安装的cronie软件版本 cronie-1.4.4-16.el6_8.2.x86_64 [root@Dao ~]# rpm -ql cronie 查看软件包详细列表 /etc/cron.d /etc/cron.d/0hourly /etc/cron.deny /etc/pam.d/crond /etc/rc.d/init.d/crond # crond定时软件 /etc/sysconfig/crond /usr/bin/crontab /usr/sbin/crond /usr/share/doc/cronie-1.4.4 /usr/share/doc/cronie-1.4.4/AUTHORS /usr/share/doc/cronie-1.4.4/COPYING /usr/share/doc/cronie-1.4.4/ChangeLog /usr/share/doc/cronie-1.4.4/INSTALL /usr/share/doc/cronie-1.4.4/README /usr/share/man/man1/crontab.1.gz /usr/share/man/man5/crontab.5.gz /usr/share/man/man8/cron.8.gz /usr/share/man/man8/crond.8.gz /var/spool/cron
系统定时任务主要和四个文件有关(cron.daily、cron.hourly、cron.monthly、cron.weekly)服务器
系统会定时自动运行文件里面的内容ide
[root@Dao ~]# ls -l /etc/ |grep cron. -rw------- 1 root root 541 Aug 24 2016 anacrontab drwxr-xr-x. 2 root root 4096 Jan 24 21:32 cron.d drwxr-xr-x. 2 root root 4096 Sep 27 2011 cron.daily # 天天 -rw------- 1 root root 0 Aug 24 2016 cron.deny drwxr-xr-x. 2 root root 4096 Jan 24 21:32 cron.hourly # 每小时 drwxr-xr-x 2 root root 4096 Sep 27 2011 cron.monthly # 每个月 -rw-r--r-- 1 root root 457 Sep 27 2011 crontab # 系统定时任务的配置文件之一 drwxr-xr-x 2 root root 4096 Sep 27 2011 cron.weekly # 每周 #有些病毒会在文件中插入定时任务,自动运行,因此很难完全清除
系统定时任务相关:系统定时任务+logrotate命令 完成对 日志的日志切割、日志轮询post
定时对这几个文件进行切割
/var/log/cron /var/log/secure /var/log/messages
查看日志目录下的日志文件测试
[root@Dao ~]# ls -l /var/log/secure* /var/log/messages* -rw------- 1 root root 1498 Jan 24 21:32 /var/log/messages -rw------- 1 root root 438 Dec 12 12:27 /var/log/messages-20181216 -rw------- 1 root root 141 Dec 16 03:29 /var/log/messages-20181223 -rw------- 1 root root 141 Dec 23 03:14 /var/log/messages-20181230 -rw------- 1 root root 206 Jan 3 12:40 /var/log/messages-20190106 -rw------- 1 root root 45504 Jan 29 21:13 /var/log/secure -rw------- 1 root root 40715 Dec 16 01:10 /var/log/secure-20181216 -rw------- 1 root root 49052 Dec 23 02:34 /var/log/secure-20181223 -rw------- 1 root root 22145 Dec 30 03:08 /var/log/secure-20181230 -rw------- 1 root root 33336 Jan 5 23:38 /var/log/secure-20190106
logrotate里面的内容url
[root@Dao ~]# cat /etc/cron.daily/logrotate #!/bin/sh /usr/sbin/logrotate /etc/logrotate.conf EXITVALUE=$? if [ $EXITVALUE != 0 ]; then /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" fi exit 0 [root@Dao ~]# cat /etc/logrotate.d/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 }
使用的几个命令
crontab -l (list) #查看用户的定时任务(列表)cron table crontab -e (edit) #编辑用户的定时任务 /var/spool/cron/root #(root是用户名 root用户的定时任务)用户定时任务存放的目录
第一次用的时候回提示
[root@Dao ~]# crontab -l no crontab for root #用户没有定时任务
注:Linux中,每一个用户的定时任务是分开的
在定时任务中添加项目
[root@Dao ~]# crontab -e 编辑定时任务 # 和vim的操做是同样的,我写入了# pizza而后保存退出 no crontab for root - using an empty one crontab: installing new crontab [root@Dao ~]# crontab -l # pizza
在使用以前,必定要确保定时任务依赖的软件(服务)是否可使用
# 查看定时任务是否在运行 # 第一种方法 [root@Dao ~]# /etc/init.d/crond status crond is stopped # 第二种方法 [root@Dao ~]# ps -ef |grep crond root 17714 17688 0 22:01 pts/0 00:00:00 grep crond # 查看定时任务,是否是开机自启动,要保证重启后也在运行 [root@Dao ~]# chkconfig |grep crond crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off # 3 位置是on就是开机自启动了
定时任务的开启和关闭
[root@Dao ~]# /etc/init.d/crond start Starting crond: [ OK ] [root@Dao ~]# /etc/init.d/crond status crond (pid 17733) is running... [root@Dao ~]# /etc/init.d/crond stop Stopping crond: [ OK ] [root@Dao ~]# /etc/init.d/crond status crond is stopped
定时任务的开机启动关闭和开启
[root@Dao ~]# chkconfig crond off [root@Dao ~]# chkconfig |grep crond crond 0:off 1:off 2:off 3:off 4:off 5:off 6:off [root@Dao ~]# chkconfig crond on crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
如何用crontab?
[root@Dao ~]# crontab --help crontab: invalid option -- '-' crontab: usage error: unrecognized option usage: crontab [-u user] file crontab [-u user] [ -e | -l | -r ] (default operation is replace, per 1003.2) -e (edit user's crontab) #查看列表 就至关于在查看/var/spool/cron/root -l (list user's crontab) #编辑 就至关于在编辑 /var/spool/cron/root -r (delete user's crontab) #把当前都删掉,无提示,直接删 -i (prompt before deleting user's crontab) #删除以前提示 -s (selinux context)
为何使用crontab命令,而不是直接操做/var/spool/cron/root这个文件呢?
1、命令有语法检查功能,
二、更方便
/var/spool/cron/ # 定时任务的配置文件所在目录 /var/log/cron # 定时任务的日志文件 运行过程的一个记录,没法显示运行的对不对 /etc/cron.deny # 哪些用户禁止使用定时任务 - 定时任务黑名单
关于如何看日志
什么时间作什么事情
时间分为5个部分-----分时日月周,事情就是命令或者脚本
* #每 /n #隔 */10 * * * * 表示每隔10分钟 - #从哪到哪 07-08 , #分隔 17,18,21
题目:每5分钟同步一下系统的时间
#第一个里程碑-命令 ntpdate ntp1.aliyun.com #注意:编写定时任务要使用命令的绝对路径 /usr/sbin/ntpdate ntp1.aliyun.com #第二个里程碑-写入定时任务 crontab -e #在文件中写入 # sync time by pizza at 20190123 00:15 */5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com #第三个里程碑-检查 ##1)看日志 tail -f /var/log/cron ##2)看结果 查看时间是否在跟新(能够先手动更改)
注:You have mail in /var/spool/mail/root
在修改时间时,会出现这句话。下面会说到
题目:天天的上午7点到11点,每个小时运行cmd命令
# 注意:在写小时的时候,必定要加上00,不然就表示没分钟 * 07-11 * * * CMD # 表示没分钟都运行 00 07-11 * * * CMD # 表示每一个小时都运行
题目:每分钟把本身的名字 追加到/oldboy/oldboy.txt
依照上面的流程:命令----写入----检查
* * * * * echo `whoami` >> /oldboy/oldboy.txt
#一、命令行测试 #二、把命令放入脚本中(命令多的时候) #三、测试脚本是否可使用 #四、写定时任务 #五、检查结果
注:注释中写清楚备注信息,谁在什么时间作什么
注:超过两条命令都使用脚本
题目:每分钟显示当前系统的时间(年-月-日),追加到/tmp/time.log中
##0一、命令 [root@learn-Linux001 ~]# date +%F 2019-01-30 ##0二、脚本 [root@learn-Linux001 ~]# mkdir -p /server/scripts 将脚本都放在/server/scripts目录下 [root@learn-Linux001 ~]# vim /server/scripts/date.sh 建立脚本,写入命令 [root@learn-Linux001 ~]# sh /server/scripts/date.sh 2019-01-30 由于建立的文件没有执行权限(默认644),因此咱们使用sh来执行 [root@learn-Linux001 ~]# sh /server/scripts/date.sh >>/tmp/date.log [root@learn-Linux001 ~]# cat /tmp/date.log 2019-01-30 测试脚本,成功 ##0三、脚本写入定时任务 # print date to file by pizza at 20190128 18:50 * * * * * /bin/sh /server/scripts/date.sh >>/tmp/date.log 使用命令的绝对路径 ##0四、检查(看日志,看结果) tail -f /etc/log/cron tail -f /tmp/date.log
当咱们在定时任务中,直接使用命令获取时间,获得的结果为空
经过查看日志,发现,执行的命令是date +
由于,%后面的内容内忽略了,若是必定要使用,能够带上撬棍(\)
* * * * * date +\%F-\%T >> /tmp/time.txt >&1
在建立脚本的时候,以sh为后缀
定时任务中,命令或者脚本结果(正确或错误)定向到黑洞(>/dev/null 2>&1)或追加到文件中(>> /tmp/oldboy.txt 2>&1)
不然,就会致使故障
若是没有上面所说的操做,很容易致使硬盘inode空间被占满,从而致使系统服务不正常
定时任务中,命令或者脚本的结果,没有定向到空或者文件中,系统会发邮件 #一、邮件的软件没有开启------大量的小文件堆积在/var/spool/postfix/maildrop/ ---inode满了 #二、邮件软件开启了------定时任务会不断的给root用户发邮件 you have new mail in /var/spool/mail/root #查看邮件服务开启没有? [root@learn-Linux001 ~]# /etc/init.d/postfix status master (pid 1592) is running...
tar zcf
tar zcvf 不可取
切到目标目录的上一级打包目标
[root@learn-Linux001 ~]# cd / [root@learn-Linux001 /]# tar zcf /tmp/ser-$(date +%F).tar etc/services 或者 cd / && tar zcf /tmp/ser-$(date +%F).tar etc/services
不然,可能会出现找不到命令的错误
由于,定时任务运行脚本的时候能够识别的PATH只有 /usr/bin 和 /bin
解决方法: #一、使用绝对路径 /sbin/ifconfig #二、在脚本开头从新定义一下PATH ## export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
用户的定时任务,默认要存放在当前用户的家目录
系统的定时任务,默认要存放在根目录下
01)、定时任务运行脚本的时候能够识别的PATH只有 /usr/bin 和 /bin
02)、java环境变量故障案例
linux定时任务生产java服务没法执行问题案例http://oldboy.blog.51cto.com/2561410/1541515
建立环境
[root@learn-Linux001 oldboy]# touch {1..500000}.txt -bash: /bin/touch: Argument list too long # 数量太多,没法运行,使用下面的方法 [root@learn-Linux001 oldboy]# echo {1..500000}.txt|xargs touch
最后致使no space left on device
[root@learn-Linux001 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 6.9G 1.5G 5.1G 22% / tmpfs 926M 0 926M 0% /dev/shm /dev/sda1 190M 35M 146M 19% /boot [root@learn-Linux001 ~]# df -hi Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda3 452K 452K 0 100% / tmpfs 232K 1 232K 1% /dev/shm /dev/sda1 50K 38 50K 1% /boot
是由于inode满了
[root@learn-Linux001 ~]# cd /oldboy/ [root@learn-Linux001 oldboy]# rm -f * -bash: /bin/rm: Argument list too long 直接删除失败 [root@learn-Linux001 oldboy]# ls |xargs rm -f
[root@learn-Linux001 oldboy]# ll
total 0 这样删除,成功(删除小文件)
可能会遇到更多的文件,这样也不能删除
解决办法是,筛选后进行批量删除
待...