标签:more 存在 进程 sys 生产环境 选项说明 lock error ges
Crond是linux系统中用来定期执行命令/脚本或指定程序任务的一种服务或软件,一般情况下,安装完centos 6/7等linux操作系统之后,默认便会启动crond任务调度服务,crond服务也会定期(默认每分钟检查一次)检查系统中是否有要执行的任务工作,如果有,便会根据其预先设定的定时任务规则自动执行该定时任务工作,这个crond定时任务服务就相当于“闹钟”一样。
Linux系统中定时任务调度的工作可分为以下两种情况:
一、 linux系统自身定期执行的任务工作:
系统周期性自行执行的任务工作,如轮询系统日志,备份系统数据,清理系统缓存等,这些任务无需我们人为干预。
[root@node1 ~]# ls -l /var/log/messages* # 系统的日志
-rw-------. 1 root root 36080506 9月 1 11:56 /var/log/messages
-rw-------. 1 root root 26616060 8月 11 15:44 /var/log/messages-20190811
-rw-------. 1 root root 26112559 8月 19 10:23 /var/log/messages-20190819
[root@node1 ~]# ls -l /var/log/secure* # 用户登录日志
-rw-------. 1 root root 10021 9月 1 11:56 /var/log/secure
-rw-------. 1 root root 15821 8月 11 14:44 /var/log/secure-20190811
-rw-------. 1 root root 9131 8月 19 09:51 /var/log/secure-20190819
二、用户执行的任务工作:
某个用户或系统管理员定期要做的任务工作,例如每天晚上0点对tomcat日志进行切割及备份数据库数据,一般这些工作都需要由运维自行设置才行。
实例:每晚0点对tomcat日志进行切割
[root@node1 ~]# crontab –l
0 0 * * * /bin/sh /server/scripts/tomcat_backup.sh >/dev/null 2>&1
用户执行的工作,也就是我们运维管理人员执行的任务工作,因此用户执行的任务是本篇文章的重点。
严格说,linux系统下的定时任务还真不少,例如:at,crontab,anacron
假如:某天晚上需要处理一个任务,仅仅是这一天的晚上,属于突发性的工作任务。要执行at命令,还需要启动一个atd的服务才行,在实际工作中,需要用到的时候几乎没有,因此此处也不详解。
crontab命令
正如前面所说的这个命令可以周期性的执行任务工作。
例如:每晚0点备份数据库数据。如果要执行crontab这个命令,也需要启动一个服务crond才行,此命令也是生产环境最常使用到的命令。
Centos7系统 查看crond服务是否开机自启
[root@node1 ~]# systemctl list-unit-files |grep crond
crond.service enabled
注:centos6系统应使用如下命令:
chkconfig –-list |grep crond
查看crond服务进程
[root@node1 ~]# ps -elf|grep [c]rond
4 S root 633 1 0 80 0 - 31555 hrtime 14:03 ? 00:00:00 /usr/sbin/crond -n
anacron:此命令主要用于非7*24小时开机的服务器准备的,anacron并不能指定具体时间执行任务工作,而是以天为周期或者在系统每次开机后执行的任务工作。
它会检测服务器停机期间应该执行,但是并没有执行的任务工作,并将该任务执行一遍。
小结:
crontab 【-u user】 {-l|-e|-r|-i}
查看系统帮助
man crontab
[root@node1 ~]# crontab --help
crontab:无效选项 -- -
crontab: usage error: unrecognized option
Usage:
crontab [options] file
crontab [options]
crontab -n [hostname]
Options:
-u <user> define user
-e edit user's crontab
-l list user's crontab
-r delete user's crontab
-i prompt before deleting
-n <host> set host in cluster to run users' crontabs
-c get host in cluster to run users' crontabs
-s selinux context
-x <mask> enable debugging
Default operation is replace, per 1003.2
crontab –l查看当前用户的定时任务配置
[root@node1 ~]# crontab –l
0 0 * * * /bin/bash /server/scripts/tomcat_log_cut.sh >/dev/null 2>&1 #tomcat日志切割
crontab –e进入当前用户的定时任务vim编辑模式
[root@node1 ~]# crontab –e
#tomcat日志切割
0 0 * * * /bin/bash /server/scripts/tomcat_log_cut.sh >/dev/null 2>&1
~
~
crontab –u 用户名 –l查看指定用户的定时任务设置
[root@node1 ~]# crontab -u root –l
#tomcat日志切割
0 0 * * * /bin/bash /server/scripts/tomcat_log_cut.sh >/dev/null 2>&1
[root@node1 ~]# crontab -u node1 -l
no crontab for node1
通过crontab我们可以在固定的间隔时间执行指定的系统指令或script脚本。时间间隔的单位可以是分钟,小时,日,月,周及以上的任意组合。(注意:日和周不要组合)
crond服务通过crontab命令可以很容易的实现周期性的日志分析或数据备份等企业运维场景工作
*/5 * * * * /bin/bash /server/scripts/tomcat_log_cut.sh >/dev/null 2>&1
说明:
五个星含义:
:分钟 /5代表每隔5分钟
:小时
:日
:月
:星期
/bin/sh /server/scripts/tomcat_log_cut.sh :需要执行的命令或脚本(命令必须全路径,可使用“which 命令”,查看命令路径)
文件 | 说明 |
---|---|
/etc/cron.deny(拒绝) | 该文件中所列用户不允许使用crontab |
/etc/cron.allow(允许) | 该文件优先级高于cron.deny(默认不存在,一般不用) |
/var/spool/cron/ | 所有用户crontab配置文件默认都存在此目录,文件名以用户名命名 |
[root@node1 ~]# cat /etc/cron.deny
node1
[root@node1 ~]# su - node1
[node1@node1 ~]$ crontab -l
You (node1) are not allowed to use this program (crontab)
See crontab(1) for more information
[node1@node1 ~]$ crontab -e
You (node1) are not allowed to use this program (crontab)
See crontab(1) for more information
[root@node1 ~]#
[root@node1 ~]# ls /var/spool/cron/
root #默认是没有的,只有此用户创建了定时任务才有
[root@node1 ~]# cat /var/spool/cron/root
0 0 * * * /bin/sh /server/scripts/tomcat_log_cut.sh >/dev/null 2>&1 #tomcat日志切割
参数 | 含义 |
---|---|
-l(字母) | 查看crontab文件内容 |
-e | 编辑crontab文件内容 |
-r | 删除crontab文件内容 |
-u user | 指定使用的用户执行任务 |
==特别强调:-r参数在生产中很少用,也请各位慎用,使用时,请大家务必怀着对rm –rf 一样的态度,能够不用,就绝对不用!!!==
补充:
crontab{-l | -e }实际上就是在操作/var/spool/cron/当前用户这样的文件
使用crontab命令的优点:
默认情况下,当用户建立定时任务规则后,该规则记录对应的配置文件会存在于/var/spool/cron中,其crontab配置文件对应的文件名与登录的用户名一致,如:root用户的定时任务配置文件为/var/spool/cron/root
crontab定时任务的书写格式很简单,用户的定时任务规则一般分为6个段(每个段通过空格来分隔,系统的定时任务为/etc/crontab,分为七个段,以空格来分割),前五段为时间的设定段,第六段为所要执行的命令或脚本任务段
[root@node1 ~]# cat /etc/crontab
# Example of job definition:
# .---------------- minute (0 - 59) 分钟 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 星期
# * * * * * user-name command to be executed
分 时 日 月 周
段 | 含义 |
---|---|
第一段 | 代表分钟 |
第二段 | 代表小时 |
第三段 | 代表日,天 |
第四段 | 代表月份 |
第五段 | 代表星期,周几 |
==提示:时间记忆口诀:分时日月周。 取值范围口诀,正常日期时间范围。==
特殊符号 | 含义 |
---|---|
* | *号,表示任意时间都,实际就是“每”的意思 |
- | 减号表示分隔符,表示一个时间范围,区间段,如17点到19点 例如:每天的17,18,19点的00分执行任务。00 17-19 * * * cmd |
, | 逗号,表示分隔时段的意思 例如:每天的5点和10点00分执行任务,00 5,10 * * * cmd |
/n | N代表数字,即“每隔n单位时间”。 例如:每10分钟执行一次任务可以写成 /10 * * * cmd ,其中,/10的范围是0-59,因此也可以写成0-59/10 |
***** command 每1分钟执行一次command
3,15 ***** command 每小时的第3和第15分钟执行
3,15 8-11 * * * command 在上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * command 每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 command 每个星期一的上午8点到11点的第3和第15分钟执行
22 14 * * 0 command 每周日的14点22分执行
02 04 * * * command 每天4点的02分钟执行
/dev/null 2>&1
实例
0 0 * * * /bin/sh /shell/tomcat_log.sh>/dev/null 2 >&1
解释
0是标准输入 使用<或<<
1是标准输出 使用>或>>
2是标准错误输出 使用2>或2>>
/dev/null 2>&1 即错误输出与标准输出全部重定向到空,可以写成1>/dev/null 2>/dev/null
关于重定向的作用
%
无法执行,需要加\转义>>
与>/dev/null 2>&1
不要同时存在一、日期错误
crontab编辑后报错
crontab: installing new crontab ?"/tmp/crontab.QZzQuN":1: bad minute
报错原因:crontab –e只写了命令,日期出现错误或者未填写
解决方法:crontab –e重新编辑定时任务,正确书写格式
二、inode号耗尽
设置crontab时提示:No space left on device
定位故障:
cd /var/spool/clientmqueue ls | xargs rm –f
故障分析:
系统中cron执行的程序有输出内容,输出内容会以邮件形式发给cron的用户,而sendmail没有启动就产生了这些文件
解决方法:将crontab里面的命令后面加上>/dev/null 2>&1
标签:more 存在 进程 sys 生产环境 选项说明 lock error ges
原文地址:https://www.cnblogs.com/BabySermonizer/p/11444154.html