简介
哪些是计划任务?
提早计划某个时间点做某件事情--》定时定点去完成某个任务
闹钟
脚本:帮助我们去完成个别事情的工具
计划任务:帮助我们去执行脚本
不须要人去执行了,提高了工作效率,解放了人力
linux系统则是由cron(crond)这个系统服务来控制的。Linux系统里面本来就有特别多的计划性工作suse linux 下载,因而这个系统服务是默认启动的。另外,因为使用者自己也可以设置计划任务linux at 执行脚本,所以,Linux系统也提供了使用者控制计划任务的命令:crontab命令。
crond是linux下拿来周期性的执行某种任务或等待处理个别风波的一个守护进程,与windows下的计划任务类似linux 常用命令,当安装完成操作系统后,默认会安装此服务工具,而且会手动启动crond进程,crond进程每分钟会定期检测是否有要执行的任务,假如有要执行的任务,则手动执行该任务
文件/etc/crontab
[root@sanchuang ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=HOME=/
# run-parts
51 * * * * root run-parts /etc/cron.hourly
24 7 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
前四行是拿来配置crond任务运行的环境变量,第一行SHELL变量指定了系统要使用那个shell,这儿是bash,第二行PATH变量指定了系统执行命令的路径,第三行MAILTO变量指定了crond的任务执行信息将通过电子短信发送给root用户,假如MAILTO变量的值为空linux at 执行脚本,则表示不发送任务执行信息给用户,第四行的HOME变量指定了在执行命令或则脚本时使用的主目录。第六至九行表示的涵义将在下个小节详尽述说。这儿不在多说。
anacron
anacron服务是cron服务的补充程序,起到查漏补缺的作用
anacron服务
填补cron在系统死机后不能执行计划任务的问题,等系统开机后将没有执行的计划任务执行一遍。
不能代替cron
按天、周或月为单位去检测系统未进行的cron任务
/var/spool/anacron
服务名称:/etc/init.d/anacrond
开机时手动运行,之后将未执行的计划任务执行一遍后,anacron都会手动停止
[root@sanchuangcron.daily]#cat/etc/anacrontab
计划任务相关的文件:
配置文件:/etc/crontab
日志文件:/var/log/cron
储存每位用户的计划任务文件:/var/spool/cron/用户名
操作系统自身须要的计划任务:/etc/{cron.daily,cron.hourly,cron.weekly,cron.monthly}
进程
案例:
怎样做到让一个程序每间隔一秒去做一件事情?
程序上面使用while循环,每间隔一秒钟执行一次sleep命令
shell脚本
[root@sanchuang lianxi]# cat create_dir_v2.sh
#!/bin/bash
#新建test目录
mkdir -p /lianxi/test
num=1 #num变量的初始值
while :
do
mkdir /lianxi/test/sanchuang$(date +%Y%m%d%H%M%S)
sleep 1 #暂停1秒
#记录已经创建了多少个文件夹了,搞一个日志文件记录
echo $((num++)) >/lianxi/test/num.log #num++ 等同于 num=num +1
done
python脚本
[root@sanchuang sanchuang]# cat create_dir_v4.py
#!/usr/bin/python3
#导入os time datetime 库
import os
import time
import datetime
#判断/lianxi/test4文件夹是否存在
#os.path.exists() 判断文件是否存在
#os.mkdir() 新建文件夹
if not os.path.exists("/lianxi/test4"):
os.mkdir("/lianxi/test4")
#切换路径到/lianxi/test4
os.chdir("/lianxi/test4")
num = 0
#每一秒新建一个文件夹
while True:
#获得当前的时间
ctime = datetime.datetime.now().__format__("%Y%m%d%H%M%S")
#拼接文件名 sanchuang+时间
filename = f"sanchuang{ctime}"
#新建文件夹
os.mkdir(filename)
#暂停1秒
time.sleep(1)
#统计新建的文件夹的数量
num = num + 1
#将num变量的值写到文件/lianxi/test4/num.log里
with open("/lianxi/test4/num.log","w") as f:
f.write(f"{num}n")
订制计划任务
时间设置特别灵活
命令crontab
计划任务的相关命令:
crontab-eedit编辑计划任务
crontab-l查看计划任务list
crontab-l-uchenlin查看chenlin这个用户的计划任务
计划任务储存的目录:/var/spool/cron
样例
每天的23:00备份一次,使用计划任务执行
备份脚本: /lianxi/backup_log.sh
计划任务的相关命令:
crontab -e edit编辑计划任务
crontab -l 查看计划任务 list
crontab 计划任务
[root@sanchuang lianxi]# crontab -e
第1步:按i进入计划任务的编辑模式,输入下面的内容
0 23 * * * bash /lianxi/backup_log.sh
第2步:按ESC,再输入:wq 退出并且保存
[root@sanchuang lianxi]# crontab -l 查看计划任务
0 23 * * * bash /lianxi/backup_log.sh
计划任务执行脚本的时侯,是在后台执行的,人看不到
怎样晓得计划任务是否执行?
1.直接看疗效
2.看日志文件crontab的日志:记录什么计划任务的创建、执行、修改、查看等操作
/var/log/cron
[root@sanchuang log]# tail -f cron
Mar 16 15:06:35 sanchuang crontab[22483]: (root) LIST (root) 查看
Mar 16 15:06:49 sanchuang crontab[22484]: (root) BEGIN EDIT (root) 编辑
Mar 16 15:07:07 sanchuang crontab[22484]: (root) REPLACE (root) 修改
Mar 16 15:07:07 sanchuang crontab[22484]: (root) END EDIT (root) 结束编辑
Mar 16 15:07:25 sanchuang crontab[22486]: (root) LIST (root)
Mar 16 15:08:01 sanchuang crond[22151]: (root) RELOAD (/var/spool/cron/root) 加载计划任务开始执行
Mar 16 15:08:01 sanchuang CROND[22491]: (root) CMD (bash /lianxi/sanchuang/create_dir.sh)
Mar 16 15:08:01 sanchuang CROND[22489]: (root) CMDOUT (tar: 从成员名中删除开头的“/”) 脚本的执行输出效果
CROND[22491]CROND是进程[22491]是crond的进程号pid号
CMD表示执行命令command
[root@sanchuang log]# ps aux|grep crond
root 22151 0.0 0.1 36332 3624 ? Ss 13:08 0:00 /usr/sbin/crond -n
root 22518 0.0 0.0 12320 976 pts/1 R+ 15:10 0:00 grep --color=auto crond
计划任务的顺风车:linux系统本身也有一些任务须要定时完成的
比如:日志文件的轮转--》每隔一段时间形成一个新的日志文件
updatedb--》locate手动每晚更新一次
/var/spool/cron是储存用户的计划任务的
linux系统的后台的工作举办须要的计划任务储存在那里?
/etc/下的那些文件夹里可以储存linux系统的计划任务
cron.d/cron.daily/cron.denycron.hourly/cron.monthly/crontabcron.weekly/
cron.d/储存计划任务的目录
cron.daily/储存每晚须要执行的任务
[root@zabbix-client-1cron.daily]#pwd
/etc/cron.daily
[root@zabbix-client-1cron.daily]#ls
logrotateman-db.cronmlocate
[root@zabbix-client-1cron.daily]#
cron.hourly/储存每小时须要执行的任务
cron.monthly/储存每月须要执行的任务
cron.weekly/储存每周须要执行的任务
cron.deny储存拒绝谁执行计划任务
[root@sanchuangcron.d]#cat/etc/cron.deny
qiankai
用户的计划任务
每位用户都有自己的计划任务
[root@sc-server cron]# crontab -u xiaoyang -e
crontab: no changes made to crontab
[root@sc-server cron]# crontab -u sumeng -e
crontab: no changes made to crontab
[root@sc-server cron]# crontab -u root -e
crontab: no changes made to crontab
储存计划任务的文件夹
主要设置文件
用户定义的设置,坐落文件:/var/spool/cron/用户名
[root@sanchuang cron]# cd /var/spool/cron/
[root@sanchuang cron]# ls
chenlin jinzhiyang qiankai root
[root@sanchuang cron]# cat qiankai
*/1 * * * * mkdir -p ~/$(date +%F_%H%M%S).qiankai
[root@sanchuang cron]# cat chenlin
*/1 * * * * mkdir -p ~/$(date +%F_%H%M%S).chenlin
[root@sanchuang cron]# cat jinzhiyang
*/1 * * * * mkdir -p ~/$(date +%F_%H%M%S).jin
[root@sanchuang cron]# cat root
#0 23 * * * bash /lianxi/backup_log.sh
*/1 * * * * bash /lianxi/sanchuang/create_dir.sh
0 */1 * * * mkdir -p /lianxi/$(date +%F_%H%M%S).fengdeyong
* */1 * * * mkdir -p /lianxi/$(date +%F_%H%M%S).fengdy
删掉计划任务
中止它就是把那种计划任务删除
可以把计划任务注释,就不会执行了--》推荐注释
其实也可以删掉
可以删掉对应的文件
[root@sc-server log]# cd /var/spool/cron/ 存放计划任务的目录 一个用户对应一个文件,存放自己的计划任务
[root@sc-server cron]# ls
root xiaoyang
[root@sc-server cron]# cat root
01 05 31 3 * bash /backup/backup_log.sh
#01 */2 * * * ntpdate ntp.sjtu.edu.cn
*/1 * * * * ntpdate ntp.sjtu.edu.cn
[root@sc-server cron]# cat xiaoyang
*/1 * * * * mkdir ~/${RANDOM}-xiaoyang
[root@sc-server cron]# crontab -e
crontab: no changes made to crontab