⑴ 创建周期性任务 cron
本篇中主要从具体的实例中说明怎样创建计划任务
1,周期性任务计划:cron
(1)相关的程序包:默认已安装
使用 rpm –qi cronie 查看相关包具体信息
cronie: 主程序包,提供crond守护进程及相关辅助工具
cronie-anacron: cronie的补充程序,用于监控cronie任务执行状况,如cronie中的任务在过去该运行
(2)计划周期性执行的任务提交给crond,到指定时间会自动运行
系统cron任务:系统维护作业
(3)要确保crond守护处于运行状态:查看crond服务是否启动
CentOS 7:
systemctl status crond 查看是否启动
systemctl start crond 启动方法
CentOS 6:
service crond status查看是否启动
service crond start启动方法
(4)系统cron任务:系统维护作业
/etc/crontab 将计划任务写入该文件
用户cron任务:
crontab命令 使用crontab命令创建
(5)日志: /var/log/cron 监控计划任务
2.系统计划任务
(1)查看任务 vim /etc/crontab
示例:每隔10分钟执行一次磁盘空间检查和磁盘节点号检查,一旦发现任何分区利用率大于80就执行wall警报
1、解释:第1位 */10 表示每10分钟执行一次(注意,*/#这里#仅限能被60 整除的数,如 */12 表示每12分执行一次)
第2位* 小时,*代表每个小时都要执行,2代表凌晨两点执行,20代表晚上8点执行(24小时制)
第3位*日,*代表每天执行,4 表示每月4号执行。20代表每月20号执行(1-31天)
第4位*月,*代表每月都执行,1代表一月,2代表2月 (1-12月)
第5位*星期几,*代表任意一天,1表示星期一,(0-7,0和都表示星期日)
第6位root 表示执行人是root
第7位/root/bin 执行的操作,可以是一条命令,也可以是脚本名称,注意这里写上完整的路径。
2.脚本示范
注意:(1)没有被重定向的输出会被邮寄给用户
(2)根用户root能够修改其它用户的作业
(3)运行结果的标准输出和错误以邮件通知给相关用户
执行的命令结果最好导入垃圾桶中
COMMAND &> /dev/null
(4)对于cron任务来讲, %有特殊用途;如果在命令中要使用%,则需要转义,将%放置于单引号中,则可不用转义
建议将执行的操作写入脚本中,不要直接写在/etc/crontab中
(5)命令在写入脚本或者/etc/crontab之前,建议先做测试
(6)这里写完脚本后要把脚本加上执行权限,chmod +x checkdisk.sh(脚本名)
3.用户周期性任务
(1)用户cron:
crontab命令定义,每个用户都有专用的cron任务文件:/var/spool/cron/USERNAME
crontab命令:本身有suid 权限
crontab [-u user] [-l | -r | -e] [-i]
-l: 列出所有任务;
-e: 编辑任务;
* * * * * wall I am
-r: 移除所有任务;
-i:同-r一同使用,以交互式模式移除指定任务
-u user: 仅root可运行,指定用户管理cron任务
crontab –e –u mage
(2)例子1:普通用户liyi 每分钟广播一次hello
切换到liyi 用户下 su – liyi
切换到root用户下,exit,进入/var/spool/cron/ ,可以看到guan用户创建的任务,当然root用户可以修改和删除普通用户的计划任务。
4.控制用户执行计划任务
控制用户执行计划任务: /etc/cron.{allow,deny}
白名单: /etc/cron.allow 默认不存在,只有该文件中的用户才能执行crontab命令
黑名单:/etc/cron.deny 默认存在,拒绝该文件中用户执行crontab命令, 而没有在cron.deny 文件中的使用者则可执行
如果两个文件都不存在,只有root 可以执行 crontab 命令
解释:先看/etc/cron.allow文件,如果有,则只看/etc/cron.allow文件,只有/etc/cron.allow中的用户才能执行,如果没有该文件,则查看/etc/cron.deny文件。除/etc/cron.deny中的用户之外的用户都可以创建cron任务,如果两个文件都不存在,则仅root可以创建cron任务。
⑵ Centos7 利用crontab定时执行任务及配置方法
crond是什么?
crond 和crontab是不可分割的。crontab是一个命令,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设咐岁野备读取衡喊指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语chronos(χρόνος),原意是时间。
而crond正是它的守护进程。cron服务是一个定时执行的服务,可以通过crontab 命令添加或者编辑需要定时执行的任务。
linux定时任务分为两种
1)系统自身轮训的任务,比如定时(5天或者一周)备份/var/log/message等日志文件(系统的定时任务一般分为七段或者八段(centos6以下),以空格分割)
系统轮训的配置文件/etc/logrotate.conf (centos7以下的在/etc/cron.daily/logrotate/logrotate.conf )
2)用户执行的定时任务(用户的定时任务一般分为六段)
at适合执行一次就结束的调度任务
anacrontab适合于非7*24小时开机的服务器准备的,是以天为单位执行的,不能指定以分钟的定时任务,在停机期间没有任务执行,可以开机时执行。
cron服务是Linux的内置服务,但它不会开机自动启动,可以每分钟执行任务。可以用以下命令启动和停止服务:
以上1-5行分别雀悄为启动、停止、重启服务和重新加载配置、查看服务状态
把cron设为在开机的时候自动启动
crontab操作
基本格式
基本使用
⑶ 记录一次Centos服务器tmp目录满的问题排查处理....
早上美编组突然反应账号登录不上,个别文件上传不上,本人非专业的服务器运维人员,第一反应是服务器磁盘空间满了,立即上去排查一圈,发现磁盘尚有剩余空间,所以进一步排查问题,现在讲相关过程记录下来备用。
问题发现:相关应用不能正常使用,系统有明显报错提示(如下):
....bash: cannot create temp fileforhere-document: No space leftondevice...
有过初步的运维知识,并经过度妈显示 这种情况应该是服务器tmp目录被占满的提示,因此开始排除问题:
一、查看服务器磁盘空间情况:
df -hl 命令显示 / 根目录40%空间已使用,尚有60%的空间未被使用,所以磁盘空间占满的情况给排除了(如果出现占用100%的问题,请自行度妈找解决问题办法,不在本篇讨论的范围之内;)
二、 找出问题原因所在并排除 (重点)
因为本人非专业的运维人员,所以并不知道接下来该怎么办(大佬可以无视),经过一番搜索及请教,得到一种提示: LINUX服务器也会因为小文件太多造成inode索引使用完,而报以上错误.... ; 随即开始确认问题;
1、执行命令 df -i 得到如下图:
看到了 100%,感兴趣的人自行去网络,大致意思是LINUX写文件需要两个条件:01:磁盘有空间(文件大小占用容量);02:inode(类似于编号)之类的东东(存放文件数量),哪个有问题都会提示写入不了文件;病因找到,开始处理。
2、因为tmp目录一般在系统 / 根目录下,随即 cd / ,切换至系统根目录下执行如下命令
for i in /*; doecho$i;find$i| wc -l; done
大致意思是从 / 根目录开始逐级排查目录下文件的数量多少,一般会得到如下的图示;
经过层层定位,本人定位到如下目录:/var/spool/postfix/maildrop ,显示文件数量 200多万个,着实是有点大,封顶多少我也不知道,接下来就是删除文件了呗,执行如下命令:
ls | xargs rm -rf;
经过约10分钟左右的等待,命令执行完毕,通知美编组测试,一切恢复正常,特撰文记录。
三、为什么会出现这种情况,后续处理
/var/spool/postfix/maildrop 这个目录好像是存放了类似于cron执行后邮件通知的内容信息文件,继续上网查资料,发现是crontab 每次执行任务后会发送邮件,接受者是在他的配置文件 “/etc/crontab” 通过 MAILTO=root’ 来设置的,默认是root,如果执行输出没有十分必要要用邮件发送的话,可以修改此处。
随修改如下:
执行命令 vi /etc/crontab;
将‘MAILTO=root’替换成‘MAILTO="",然后service crond restart即可。
===================================与本篇内容无关==================================
使用命令 -h –max-depth=1 /* 查看/ 根路径下文件的大小
-sh /* 查看哪个目录最大,一步一步的查找大文件
使用 -h --max-depth=1查找最大的文件
⑷ CentOS 中 crontab 定时任务找不到命令问题
在 Linux 中配橘,经常会使用定时任务,培戚团定时执行指定的脚本或二进制程序文件。但是发现有时候 crontab 在执行的时仔码候,总是提示找不到命令。但是手动执行的时候,却没有该问题。
crontab 定时任务的执行日志,可以在 /var/log/ 目录中找到。
出现上面的问题,其实就是环境变量不一样的问题。crontab 执行时的环境变量与手动执行时的环境变量不一样。
使用一个脚本包装环境变量,同时在该脚本内调用要执行的二进制程序文件。
定义 runBinaryFile.sh 文件,用于包装环境变量。
定时执行的时候,就执行 runBinaryFile.sh 脚本文件即可 。
⑸ CentOS7开机自动执行命令
1.在/etc/profile内添加执行命令
2.添加crontab定时任务
3.在/etc/rc.local内添加执行命令。
场景:开机以普通用户身份执行脚本
针对以上场景可以用到 “su” 命令
注意:默认/etc/rc.local没有执行权限,需要手动添加一个执行权限 chmod +x /etc/rc.d/rc.local。
至于为什么不用其他两种方法,大家可以自行了解一下
⑹ 关于linux CentOS系统定时自动重启
1、查看定时执行的文件:命令:“crontab -l”,如同ll或者ls一样,显示定时任务列表信息。
⑺ crontab 命令介绍怎么用
任务调度的crond常驻命令
crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。而linux任务调度的工作主要分为以下两类:
1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置
Crontab是UNIX系统下的定时任务触发器,其使用者的权限记载在下列两个文件中:
文件
含义
/etc/cron.deny
该文件中所列的用户不允许使用Crontab命令
/etc/cron.allow
该文件中所列的用户允许使用Crontab命令
/var/spool/cron/
是所有用户的crontab文件
/var/spool/cron/crontabs
/var/spool/cron/crontabs
Crontab命令的格式为:crontab –l|-r|-e|-i [username],其参数含义如表一:
参数名称
含义
示例
-l
显示用户的Crontab文件的内容
crontabl –l
-i
删除用户的Crontab文件前给提示
crontabl -ri
-r
从Crontab目录中删除用户的Crontab文件
crontabl -r
-e
编辑用户的Crontab文件
crontabl -e
用户所建立的Crontab文件存于/var/spool/cron中,其文件名与用户名一致。
它的格式共分为六段,前五段为时间设定段,第六段为所要执行的命令段,
格式如下:* * * * *
其时间段的含义如表二:
段
含义
取值范围
第一段
代表分钟
0—59
第二段
代表小时
0—23
第三段
代表日期
1—31
第四段
代表月份
1—12
第五段
代表星期几,0代表星期日
0—6
例:如果用户的Crontab文件的内容是:29 19 * * * echo its dinner time,则系统每天的19:29显示‘its dinner time’
示例(创建一个cron全过程,每分钟都会在test.txt里输入当前时间):
1. 以普通用户登录linux系统(我用的是CentOS4.1)
2. $crontab –e
说明:系统默认的编辑器是VIM,如果不是请加上以下shell:
$EDITOR=vi
$export EDITOR
3. 输入”*/1 * * * * date >> $HOME/test.txt”,save and exit VIM
4. $su root
5. $cd /etc/init.d
6. ./crond restart
下面看看看几个具体的例子:
● 0 */2 * * * /sbin/service httpd restart 意思是每两个小时重启一次apache
● 50 7 * * * /sbin/service sshd start 意思是每天7:50开启ssh服务
● 50 22 * * * /sbin/service sshd stop 意思是每天22:50关闭ssh服务
● 0 0 1,15 * * fsck /home 每月1号和15号检查/home 磁盘
● 1 * * * * /home/bruce/backup 每小时的第一分执行 /home/bruce/backup这个文件
● 00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} /; 每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。
● 30 6 */10 * * ls 意思是每月的1、11、21、31日是的6:30执行一次ls命令
参数 :
crontab -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
crontab -r : 删除目前的时程表
crontab -l : 列出目前的时程表
crontab file [-u user]-用指定的文件替代目前的crontab。
时程表的格式如下 :
f1 f2 f3 f4 f5 program
其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其馀类推
使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。
crontab执行java程序的问题:
一 crontab使用注意:
crontab -l查看该用户的crontab配置,crontab -e编辑该用户的crontab配置配置一般在末尾加上 2>&1表示错误输出(2)和标准输出(1)一样输出到同一个由前面>>指定的地方
如 15 14 * * * /sys_back/monitor.sh >>/sys_back/log/monitor.log 2>&1
表示每天14:15执行monitor.sh脚本,错误和标准输出都写入monitor.log文件
涉及到文件名时最好写绝对路径
二 问题及解决
shell脚本有echo语句,有java -jar执行java程序。直接执行脚本时,一切顺利,但是放到crontab中执行时,echo语句正常,java程序却没有执行。
1 网上查找,觉得应该是环境变量的问题。说是要将java环境变量加入到shell脚本中,按照
这个方法做,发现问题依然存在。百思不得其解。
2 经转换角度,看java程序是否有问题。在java语句中直接加入打印语句,发现其在crontab日志中
居然可以显示。终于确定是java程序的问题。java程序功能很简单,就是一个语句java -Dosgi.console -Dosgi.configuration.area=./configuration -jar equinox.jar -console用来启动osgi框架。
于是在shell脚本中不调用java程序,直接改为程序中的这一句,问题解决。
但是又引发新的问题:直接java -jar会源源不断的输出osgi>到日志文件,导致日志文件越来越大。
不可行。再想办法解决。
3 感觉还是相对路径的问题。尝试在crontab调用的脚本中用相对路径向一个文件输出一句话,发现失败。(单独执行脚本没问题)既然如此,是不是java程序中也不能用相对路径呢。遂将./configuration及equinox.jar都用绝对路径,再调试,终于成功,至此问题解决。但始终感觉在程序中用绝对路径很不方便维护。
三 附加问题及解决
此脚本的作用就是判断osgi程序是否在运行,如果不运行则启动。
实现思路是ps -elf得到进程id及状态,如果id不存在,则启动,如果id存在但状态不是运行中(solaris为O,AIX为A),则杀掉原进程重新启动。
发现程序在运行几天后会自动停掉,以为是java程序有问题,然而却始终找不到问题在哪里。在解决上面问题时,却意外的发现可能不是java程序的问题。man ps时发现,solaris中,进程状态除了O,还有S(sleeping) R(Runnable) Z(Zombie僵尸进程)T(stopped),只有后两种状态下进程才是有问题的,所以很可能是crontab执行脚本时,程序状态非O就被杀掉,重启时却因为上面的问题没成功。于是修改脚本,状态是后两种时才重启。这个问题也解决了。
我也是网上转的,望采纳
⑻ Linux下定时任务(系统任务调度、用户任务调度)crontab使用详解
crond是Linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,在CentOS Linux release 7.2.1511中默认是开机启动的,大家可以使用命令:systemctl status crond进行查看。 crond进程定期(每分钟)检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。用户在cron表
(也被称为crontab文件)指定了定时任务,crontab也就是我们常见的定时任务设置命令。Linux下的任务调度分为两类,系统任务调度和用户任务调度。
系统任务调度 :系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。/etc/crontab文件就是系统任务调度的配置文件。
用户任务调度 :用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在/var/spool/cron目录中。其文件名与用户名一致,使用者权限文件如下:
通过以上帮助信息,我们可以知道crond是执行任务计划的一个守护进程。在使用crontab之前我们可以根据帮助信息来设置相关选项,一般情况下我们都使用默认值。
1.建立演示账号crontab。
2.星号(*)使用举例。
以上例子中完整演示了crontab从建立到执行的过程。“5 0 * * * echo "GeekDevOps"”表示在每天00:05执行命令:echo "GeekDevOps"。后面的星号表示只要前面条件满足都执行。例子中的-u选项指定了用户:crontab,-l选项列举了相关用户的用户任务调度,不指定用户则默认为root。执行结果默认写入到用户mail目录下的相关文件中。
3.逗号(,)的使用举例。
现在我们已经把用户切换到crontab下,因此无需额外指定-u选项相关内容。“3 2,6,8 * * *”表示每天的02:03:00、06:03:00、08:03:00分别执行一次命令:ls /usr/local。
4.减号(-)的使用举例。
例子中的“0 2-6 * * 6 df -h /”表示用户crontab在每周六的02:00、03:00、04:00、05:00、06:00执行命令:df -h / 。
5.斜杠(/)的使用举例。
例子中表示每隔2分钟执行一次命令:echo "GeekDevOps">>/root/GeekDevOps.txt。
6.crontab的使用非常简单,很容易理解,只要在取值范围内设置执行的值基本是没有问题的。现在我们要删除已经设置的这些定时任务。
例子中,选项-r表示删除所有定时任务。选项-i表示在删除前进行再次确定,输入y或者Y才能真正删除。
7.备份我们设置的用户任务调度配置文件。
8.系统任务调度的使用举例。
系统任务调度与用户任务调度不一样,需要直接在/etc/crontab里面配置,如果需要指定用户,还需要在执行命令前指定用户名。通过crontab -l 命令是查看不到系统任务调度任务的。