程序概念:
我们使用的命令,就是程序,二进制程序。
基本特征:一堆代码,一个文件,一个命令。
程序是静态的,放在电脑里没有被运行。
程序存在于磁盘中
进程概念:
简单的说把系统中的程序运行起来就是进程。
进程会存放在内存中
每个进程在启动时,系统会指定一个唯一的数字给每个进程,这个数字称为进程ID或者PID进程号
每个进程可能有两种方式存在:一个是前台,一个是后台
一般的系统网络服务都是以后台方式存在的,且都会常驻在系统中,直到关机或者主动杀死时才能停止(比如ssh远程连接服务,常称之为守护进程
==============================================
第一个带有进程或者守护进程的服务。crond定时任务服务。(守护进程)
Linux的定时任务服务crond
1.crond是什么
crond是Linux系统中用来定期执行命令或者指定程序任务的一种服务或者软件
一般我们安装完C5/C6系统的时候,crond就会默认存在了
优化开机自启动服务的时候,第一个就是crond
crond服务默认情况(每分钟),会检查系统中是否有需要执行的定时任务
秒级任务:
1.crond无能为力
2.自己写守护进程shell循环。
3.Quartz也可以实现秒级任务
2.为什么需要定时任务?
服务器:7*24小时开机提供服务是网站的基本特征
有重要数据:1天备份一次,5份以上
服务器上的数据一般最低1天备份一次,每分钟(实时备份)再增量备份
半夜一点备份
定时任务产生了。定时任务可以实现帮助我们自动备份数据
Linux定时任务分类:
1.系统自身的定期执行的任务
ll /etc/|grep cron
2.用户执行的定时任务
crontab -l
接下来我们看一下重点就是用户执行的定时任务!
linux的定时任务分类:
1.at适合执行一次就结束的调度任务。突发性的任务,每天晚上。(了解)
依赖服务atd
2.atacron 适合于非7*24小时开机的服务器准备的。开机执行的,
检测停机期间没有执行的任务,在开机后一次性执行一遍
重点 3.crond服务默认情况(每分钟),会检查系统中是否有需要执行的定时任务
crond依赖的服务就是crond
提示:我们说的crond是一个定时任务守护进程,而crontab是用户用来设置定时任务规则的命令
====使用者权限及定时任务文件
/etc/cron.deny 该文件中所列用户不允许使用crontab命令
/etc/cron.allow 该文件中所列用户允许使用crontab命令,优先于 /etc/cron.deny
/var/spool/cron 所有用户crontab配置文件默认都存放在此目录,文件名以用户名命名
定时任务指定格式
介绍:用户的定时任务分为6段,每段用空格分隔 系统定时任务为/etc/crontab,分为8段
一般前五段为时间的设定段,第六段为所要执行的命令或脚本任务
系统定时任务:
# 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 * * * * cmd
22 4 * * 0 cmd
特殊符号:* 表示每 经验技巧:定时任务规则如果到小时,就最多提每天
- 表示区间 19-21表示在19点到21点
, 表示分割时段 17,18,19 表示17、18、19点执行
/n n代表数字每隔
提示:
1.cmd为要执行的命令或脚本,例如/bin/sh /server/scripts/oldboy.sh
2.每一列之间必须要有一个空格。
注意:当定时任务没有执行时,要首先看一下crond服务有没有开启
******************************************************************
crontab -e /var/spool/cron/root crontab -e 编辑会检查语法,而直接echo,vi编辑配置不会
visudo /etc/sudoers visudo编辑会检查语法,而直接echo,vi编辑配置不会
*******************************************************************
书写crontab定时任务的多个基本要领:注意要写注释
例子1:每分钟打印一次自己的名字拼音全拼到“/server/log自己的名字命名的文件”中
[root@localhost /]# crontab -e
* * * * * echo zhangran>>/server/log/zhangran.txt 一定要用追加要不就覆盖了
例子2:每周六日上午九点和下午2点来老男孩linux学习(执行/server/scripts/oldboy.sh)
要求:/server/scripts/oldboy.sh脚本的功能是打印当天的日期格式为2014-03-23,随意追加到文件
或直接屏幕打印
注意:执行脚本要加sh 相当于命令 例子[root@localhost /]# sh /abc/dcf.sh
步骤1.创建目录并创建脚本
mkdir -p /server/scripts/
echo ‘date +%F’>/server/scripts/oldboy.sh
sh /server/scripts/oldboy.sh
步骤2.将脚本写成定时任务
注意:脚本必须能执行最好复制或者补全,不能手敲
echo “00 09,14 * *6,7 sh /server/scripts/oldboy.sh >/dev/null 2>&1”>>/var/spool/cron/root
注意:定时任务命令结尾 加/dev/null 2>&1 1是正确输出2是错误输出
这里2>&1表示让标准错误和标准输出一样,本命令北荣为即把脚本的正常和错误输出都重定向到/dev/null,即不记录任何输出
注意:超过两行的命令执行,最好用脚本文件
当定时任务没有完成或者出错去看日志:cat /var/log/cron 给定时任务看病的日志
-----------------------------------------------------------------------------------
小习题
1.每格一分钟,打印一个加号到oldboy.log,给出crondtab完整命令
[root@localhost ~]# crontab -e
* * * * * echo +>>/root/oldboy.log
2.每个两个小时将/etc/servic文件打包备份到/tmp下(最好每次备份成不同的被分包)
00 */2 * * * tar zcf /tmp/servic`date +%F`.tar.gz /etc/servic
3.每天晚上12点。打包站点目录/var/www/html备份到/data目录下(最好每次备份按时间生成不同的备份包)
00 24 * * * tar /data/www_`date +%F-%H`.tar.gz /var/www/html
4.每周六、日上午9点和下午14点来老男孩学习(执行程序/server/scripts/oldboy.sh)
echo “00 09,14 * *6,7 sh /server/scripts/oldboy.sh >/dev/null 2>&1”>>/var/spool/cron/root
============================================================
散乱知识点:
显示行号:set nu
vi命令的考察:
退出保存:wq
退出并强制保存,!为强制的意思:wq!
强制退出,不保存:q!
光标移动到文件的第一行:gg
光标移动到文件的最后一行:G
从光标所在位置将光标移动到当前行的开头:^
从光标所在位置将光标移动到当前行的结尾:$
取消上一次的动作:u
删除一行:dd 100dd是删除100行
向下搜索:/字符
向上搜索:?字符
--------------------------------------------------------------------------------------------
>dev/null 2>&1:让标准错误和标准输出都定向到空里
2>&1:就是把标准错误重定向到标准输出
如果定时任务的结尾不加>dev/null 2>&1等命令配置,有可能有大量输出信息
,时间长了,可能由于系统未开启邮件服务而导致邮件
临时目录/var/spool/clientmqueue文件数猛增的隐患发生,
大量文件会占用大量的磁盘inode节点使磁盘inode满而无法写入正常数据
------------------------------------------------------------------------------
书写Linux定时任务的8个要领
要领1:为定时任务规则加必要的注释
要领2:执行shell脚本任务前加/bin/sh
要领3:定时任务命令或脚本的文件结尾加>dev/null 2>&1
要领4:定时任务命令的执行,最好用脚本文件
要领5:在指定用户下执行相关定时任务
查看普通用户的定时任务:crontab -u zr -l
编辑普通用户的定时任务:crontab -u zr -e
要领6:生产任务程序不要随意打印输出信息 比如tar zcf 不加v
要领7:定时任务的脚本要规范路径,有指定的脚本存放目录
要领8:配置定时任务规范操作过程,防止出错
-首先要在命令行操作成功,然后复制成功的命令到脚本里,在各个细小环节减少出错机会
-然后测试脚本,测试成功后,辅助脚本的规范路径到定时任务的配置里,不要手敲
-先在测试环境下测试,然后正式环境规范部署
=========================================================
企业生产场景如何提哦是crontab定时任务
1.增加执行任务频率调试任务(某些任务不能用于生产环境)
-在调试时,把任务执行频率调快点。但是有些任务是不允许频繁执行的,比如往数据库里插入数据
这样的任务就要在测试机上测试好,然后部署到正式线上
-规范公司开发和运维人员操作流程:个人的开发配置环境-->办公室的测试环境-->idc机房的测试环境
-使用log文件调试任务。
* * * * * sh ------- >/tmp/file.log 2>&1
2.调整系统时间调试任务(不能用于生产环境)
3.通过脚本日志输出调试定时任务
4.注意一些任务命令带来的问题
前面如果有重定向,后面要去掉 >dev/null 2>&1
5.注意环境变量导致的定时任务故障:把环境变量的定义加到脚本里
6.通过crond定时任务服务日志调试定时任务
查看定时任务服务日志:/var/log/cron
================================================
定时任务8句真言:
-系统环境变量问题
-定时任务要绝对路径
-脚本权限问题加/bin/sh
-时间变量问题要用 用脚本无所谓
-脚本结尾要加>/dev/null 2>&1
-定时任务前加注释
-使用脚本程序替代命令行定时任务
-避免不必要的程序及命令输出
-切到目标的上一级目录打包
ls |xargs rm -f