7.1程序和进程的概念
程序:
是为了解决一个信息处理任务而预先的编制的工作指向方案,是由一串CPU能够执行的基本指令组成的序列,每条指令规定了计算机应进行什么操作及需要相关的有关数据。
简单的说,我们使用的命令就是程序
进程概念:
所谓进程,就是指现在系统正在执行程序,每当输入一个命令时,SHELL也会同时启动一个进程。
进程特点:
进程启动时,系统会指定一个唯一的数值给每一个进程,数值称为进程(ID)
每个进程都可能有两种方式存在:前台和后台。
系统的服务都是以后台的方式存在,且都会常驻在系统中,直到关机为止,例如sshd.
7.2 Linux系统crond定时任务介绍
7.2.1定时任务的基础学习-了解定时任务
1.crond是什么?
Crond是linux系统中用来定期执行命令和或者指定程序任务的一种服务,或者软件,一般在我们安装系统的时候,crond就默认存在。
优化开机自启动服务的时候,第一个就是crond。
Crond服务默认情况(每分钟),会检查系统中是否有需要执行的定时任务,如果有,就会根据事先定义好的规划来执行这个定时任务。
企业环境定时任务
2.为什么需要定时任务?
服务器:7*24小时开机提供服务是网站的基本特征。
服务器有重要的数据:最低一天备用一次,或者每分钟增量备份一次,半夜备份。所以定时任务就产生,定时有个备份程序,触发定时任务,就会执行备份。
- 定时任务的分类
1) 系统自身的定期执行的任务
[root@localhost logrotate.d]# ll /etc/|grep cron -rw-------. 1 root root 541 7月 27 2015 anacrontab drwxr-xr-x. 2 root root 20 9月 13 21:57 cron.d drwxr-xr-x. 2 root root 62 9月 13 21:57 cron.daily -rw-------. 1 root root 0 7月 27 2015 cron.deny drwxr-xr-x. 2 root root 44 9月 13 21:57 cron.hourly drwxr-xr-x. 2 root root 6 6月 10 2014 cron.monthly -rw-r--r--. 1 root root 451 6月 10 2014 crontab drwxr-xr-x. 2 root root 6 6月 10 2014 cron.weekly 系统自身轮训任务 [root@localhost ~]# ll /var/log/messages* -rw-------. 1 root root 225390 9月 24 16:50 /var/log/messages -rw-------. 1 root root 449608 9月 19 05:45 /var/log/messages-20190919 -rw-------. 1 root root 403290 9月 23 17:30 /var/log/messages-20190923 [root@localhost ~]# ll /var/log/secure* -rw-------. 1 root root 2827 9月 24 16:47 /var/log/secure -rw-------. 1 root root 3694 9月 19 05:19 /var/log/secure-20190919 -rw-------. 1 root root 2070 9月 23 16:16 /var/log/secure-20190923 系统轮询的日志-定时轮询 [root@localhost logrotate.d]# less /etc/logrotate.conf # see "man logrotate" for details # rotate log files weekly Weekly //每周 # keep 4 weeks worth of backlogs //保持四周 rotate 4 # create new (empty) log files after rotating old ones //老文件过期创建一个新文件 create # use date as a suffix of the rotated file //使用扩展的日期轮回文件 dateext # uncomment this if you want your log files compressed #compress # RPM packages drop log rotation information into this directory include /etc/logrotate.d # no packages own wtmp and btmp -- we'll rotate them here /var/log/wtmp { monthly create 0664 root utmp minsize 1M rotate 1 } /var/log/btmp { missingok monthly create 0600 root utmp rotate 1 }
2) 用户自身完成的定时任务
定时任务的了解
1) At适合执行一次就结束的调度任务,突发性任务。
2) Anacron适合于非7*24小时的服务器准备的。开机执行的工作,会检测到关机时应该执行但是未执行的任务,在开机后一次性执行一遍。(了解)
3) Crond服务7*24小时,只要服务器需要执行的,每分钟都可以执行。
注意:crond是一个定时任务的进程,而crontab是用户用来设置定时任务规则的命令。
3. 定时任务的书写指令的使用格式
用户的定时任务分为六段
对于时间段来说,前五段都一样。
系统的定时任务分为八段
前四行是用来配置crond任务运行的环境变量
第一行SHELL变量指定了系统要使用哪个shell,这里是bash
第二行PATH变量指定了系统执行命令的路径
第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户
如果MAILTO变量的值为空,则表示不发送任务执行信息给用户
第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。
分时日月星
星号(*):代表所有可能的值,如month字段为星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。
练习:
(00 23 * * *--每晚23时执行)
(00 17-19 * * * --每晚17-19时执行)
(*/5 * * * *--每隔五分钟执行一次)
(30 3,12 * * *--每天凌晨三点到中午12点半)
(30 8-18/2 * * * --早上八点到下午六点半每隔两个小时执行一次)
(45 4 1,10,22 * *--每月的1日10日22日的凌晨4点45分执行)
(10 1 * * 6,0—每周六周日的凌晨1点十分执行)
(* 23,00-07/1 * * *--每天23点,凌晨12点到早晨7点每小时每一分钟执行一次)
(5月5号上午九点执行:00 09 05 05 *)
(每周日,上午9:30执行:30 09 * * 0)
注意:周和日不要同时用,否则可能达不到想要的效
7.3 crontab定时任务生产应用问题7箴言
1、 系统环境变量问题
Crontab执行shell只能识别为数不多的系统环境变量,一般用户定义的普通变量是无法识别的,如果在编写脚本中需要使用这些变量,最好使用export重新声明下该脚本才能正常执行。
2、 定时任务要用绝对路径
Crontab执行shell时,如果shell路径是相对路径或者shell里含有的绝对路径,此时 就会找不到文件。
3、 脚本权限问题加/bin/sh
要保证crontab的执行者有访问shell脚本所在的目录并且执行此shell脚本的权限,最佳的方法就是执行脚本前加/bin/sh,否则有可能因为忘了为脚本设定执行权限,而无法完成任务。
4、 时间变量问题用反斜线
“%”号在crontab任务配置中被认为是newline。需要用“”来转义。Crontab任务命令中,如果有“date+%Y%m%d”,必须替换为 “date+\%Y\%m\%d”
5、 >/dev/null2>&1问题
当定时任务在你所指定的时间执行,系统会寄信给你,显示该程序执行的内容,若系统未开启邮件服务就会导致邮件临时目录/var/spool/clientqueue碎文件件逐渐增加,wei此命令为了防止占满inode.
6、 定时任务定时规范之前加注释
写定时任务加注释,什么人物,什么时间,因为什么事,干了什么,都要记得清清楚楚。
7、 避免不必要的程序及命令的输出
在开发定时任务程序和脚本时,在调试好脚本程序后,应尽量把DEBUG及命令输出的内容信息屏蔽掉,如果需要,可指向到定时日志文件里,以避免多余的系统垃圾。