老男孩Linux高端运维课程-linux系统定时任务crond入门讲解

程序概念:

简单的说:我们使用的命令就是程序,比如qq,听歌MP3,MP4,linux系统也是程序。

基本特征:可能是一堆代码,一个文件,一个命令。程序是静态的,放在电脑里没有被运行。

位置:磁盘里。

进程概念:

简单的说:就是把系统中程序给运行起来就是进程。

位置:内存中。

所谓进程(Processec)就是指现在系统正在执行的程序,每当输入一个命令时,shell也会同时启动一个命令。

每个进程启动时,系统会指定一个唯一的数字给每个进程,这个数字称为进程(ID)或者PID或者进程号。再关闭进程的时候可以指定PID关掉。


每个进程都可能以两种方式存在:前台和后台。

一般的系统服务都是以后台方式存在,且都会常驻在系统中,直到关机或者主动杀死时才结束,例如远程连接sshd,我们常称之为守护进程。(如下两个图。)


通过命令查看sshd状态,可以看到正在运行...的显示。


可以通过命令netstat -lntup|grep ssh来查看网络端口。

前面讲的内容:linux目录结构,文件属性,文件类型,权限,命令等都不是进程。

下面讲的是第一个带有进程或者守护进程的服务,crond定时任务服务(守护进程)。

1.crond是什么?
crond是linux系统中定期执行命令和指定程序任务的一种服务或者软件。

一般在我们安装完c5/c6系统的时候,crond就会默认存在了。

我们在优化开机自启动服务的时候,第一个就是crond。

crond服务默认情况(每分钟),会检查系统中是否有需要执行的任务,如果有,就会根据事先定义好的规则来执行这个定时任务。

做个比喻:crond的定时任务就相当于我们生活中闹钟一样。

crond服务==闹钟 来学习,一般都应该会。

秒级任务:

1)crond无能为力。

2)自己写守护进程shell循环。

例子:



每秒钟都会打一下。



想要在后台执行的话,就要把这个追加到文件中。


可以使用kill命令杀掉进程。


主要讲crond:

2.为什么需要定时任务?

服务器:7*24小时开机提供服务是网站的基本特征。

有重要数据:一天备一次,五次以上。

服务器上的数据一般最低一天一次,可能还要每分钟(实时备份)再增量备份一次。

时间:半夜一点备份,然后睡觉。假设一次备份持续五个小时,正是这样一个情况,定时任务就产生了。定时任务可以帮助我们自动备份数据。

linux的定时任务分类:

1.系统自身的定期执行的任务。


系统自动轮询的两个文件:


上上图中的messages和secure为什么会被轮询,这就是由系统管理的。

2)用户执行的定时任务。


这就是用户手动添加的,

linux的定时任务分类:

1)at适合执行一次就结束的调度任务。突发性任务,每天晚上。几乎不用。作为了解。(绿叶)


2)ancron适合于非7*24小时开机的服务器准备的。开机执行的,检测停机期间没有执行的任务,再开机后一次性执行一遍。(绿叶)

3)crond:crond服务默认情况(每分钟),会检查系统中是否有需要执行的任务,如果有,就会根据事先定义好的规则来执行这个定时任务。(红花)

crond依赖的服务:crond。

提示:我们说的crond是一个定时任务的守护进程,而crontab是用户用来设置定时任务规则的命令。



最常用的是:-l,-e。


其中的crontab -e编辑的文件是:/var/spool/cron/root中。



系统的定时任务。






例子:

1)30 3,12 * * * /bin/sh /scripts/oldboy.sh:每天凌晨三点和十二点的半点时刻,执行脚本。






4.3生产环境crontab专业实例:

例1:每分钟打印一次自己的名字拼音全拼到“/server/log/自己的名字命名的文件”中。


watch ls server/log/hsp.txt:每隔两秒自动看这个目录或者文件有没有生成东西,/server/log必须要存在才能出结果。想要关闭进程,以下两种方法:

1)使用kill命令杀死进程。

2)进入crontab -e,在对应进程前加#。


关于脚本:只要把命令在文件中堆叠,就是一个脚本。一般用sh a.sh(文件名)查看脚本的生成内容。

1)创建目录/server/scripts和编写oldboy.sh脚本:


不用sh(或者/bin/sh)开头引导的话,会提示权限不够。

2)书写定时任务:


也可以输入crontab -e然后放入以下内容保存:


<==脚本最好是复制命令执行过的或者把定时任务的脚本再复制到命令执行一遍。

提示:

1)调试方法:可以先改成每分钟(当然要确定脚本对系统没有影响)。

2)/bin/sh oldboy.sh这样写是错的,这样的话会找家目录下的/root/oldboy.sh,肯定找不到。所以尽量用绝对路径。

3)标准规范答案:



按照专业来讲,结尾要加黄色部分的东西(把标准错误和标准输出都定位到/dev/null,作用:不会让脚本在屏幕上打印别的东西,不会产生垃圾。如果不加:会把某个队列(下节课演示为什么要加这个东西)打满)。








还等价于&>dev/null。


红色圈住的部分是等价的。不管结果正确还是错误都放在a.log里边。

给定时任务看病的日志:/var/log/cron。

例题:


1)B

2)A


1)




不加/的话,默认指向的是运行定时任务的用户所在的家目录/。在执行任务的时候,尽量把命令放到脚本中执行,防止出错。

2)

包袱:/etc/service是不存在的,应该是/etc/services。


技巧:

1)进入打包文件或者目录的上级目录进行打包。

2)如果定时任务是按小时,打包里的日期也要精确到小时。


改错:tar zcvf /tmp/services----


第一次vim输入命令,调整命令。


第二次进入vim,去掉v,不要让有太多的输出,


技巧:

1)规范脚本存放的目录。

2)定时任务打包或者处理其他工作,最好不要在屏幕输出,如果想看,可以打到日志文件里。

3)从命令行到脚本的过程尽量复制,不要手敲。防止出错。


测试的时候尽量用/bin/sh /server/scripts/tar.sh。不用sh /server/scripts/tar.sh,后者是不规范的。

技巧:

1)命令行测试好,要用定时任务使用的完整命令测试。





操作完进行检查。如上图。




(3)


错误纠正:tar zcvf /data/html----。 


进入history,可以按住alt键竖选。


注意第一次vim与第二次vim的区别。




1)系统内核优化的文件。优化的实质是在改proc里边的文件。

2)防止开机自启动命令或者脚本的文件。

3)服务器本地域名解析的文件。

4)开机设备自动挂载的文件。

5)系统登陆安全的日志。



遮挡部分:vip.taobao.com



注意:

\{n,m\}:如果是egerp,可以没有\。

[^t]:匹配不含t的。

[^tea]:不含tea的。

^[^t]:以不是t的开头。

其他详情见cadn博客正则表达式。

正则表达式不是在每个命令下都能用的,一般就是三剑客用的比较多。我们所说的是linux的正则表达式,和开发语言的正则表达式还有所区别。





其中的ZZ是保存文件内容的命令。



















































猜你喜欢

转载自blog.csdn.net/youmatterhsp/article/details/80502112