操作命令:
#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:offwindows 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.conf2、用户执行的任务工作:某个用户或系统管理员定期要做的任务工作,例如每隔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文件
说明
/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
参数
含义
指定示例
-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用户定时任务基本格式如下:
01 * * * * cmd 02 4 * * * cmd 22 4 * * 0 cmd 42 4 1 * * cmd 分 时 日 月 周 任务特殊符号
含义
*
*号表示任意时间都,就是“每”的意思,举例:如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。
示例一:
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服务 强调:周和日不要同时使用,否则可能达不到想要的效果添加注释就知道每一个定时任务运行的是什么作业,以防以后混乱,切记这个习惯和规范
[root@oldboy ~]# crontab -l #time sync by Wolf_Dreams 2018-05-01 */5 * * * * /usr/sbin/ntpdate time1.aliyun.com > /dev/null 2>&1执行定时任务时,如果是执行脚本,尽量在脚本前面加上/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/dev/null为特殊的字符设备文件,表示黑洞设备或空设备
[root@oldboy ~]# ls -l /dev/null crw-rw-rw- 1 root root 1, 3 May 1 10:28 /dev/nullLinux系统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 - /mnt2、查看/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
转载于:https://www.cnblogs.com/Wolf-Dreams/p/10693317.html
相关资源:Linux之定时任务Crond详解