目录
1.3.2、创建计划任务的命令(crontab -e)和查看计划任务(crontab -l)
2.2.2、普通用户是否可以查看其他普通用户的计划任务(crontab -l -u + 用户)
3、root用户给普通用户创建计划任务(crontab -e -u 用户)与普通用户自己创建计划任务
8、扩展练习——实现每秒新建一个文件夹(python编程)
1、关于计划任务的一些知识
服务器托管:将服务器放到联通或者电信、移动等公司的机房里提供上网服务
机房:24小时不断电、不断网、恒温、防止黑客攻击
1.1、为什么需要计划任务?
可以自动执行,不需要人干预,解放了人力,提高了效率
linux里的计划任务:
crond进程:负责linux里执行计划任务的程序,crond进程是一直在linux系统里运行的
每一分钟去检查下linux系统里的计划任务
1.2、停止和启动crond进程
[root@fttsaxf ~]# ps aux|grep crond # 查看crond进程是否存在
root 700 0.0 0.0 126388 1676 ? Ss 16:24 0:00 /usr/sbin/crond -n
root 1707 0.0 0.0 112828 984 pts/0 S+ 17:14 0:00 grep --color=auto crond
[root@fttsaxf ~]# service crond restart
Redirecting to /bin/systemctl restart crond.service # 前边两个字母是重定向的意思,后边的命令是现在最新的命令形式 service crond restart等价于systemctl stop crond
[root@fttsaxf ~]# service crond stop
Redirecting to /bin/systemctl stop crond.service
1.3、crontab
crontab是创建计划任务的命令,里边有如何定义计划任务的格式
[root@fttsaxf ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# 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
* 表示任意的时间
1.3.1、时间周期设置和任务内容设置的格式
1.3.2、创建计划任务的命令(crontab -e)和查看计划任务(crontab -l)
练习1:
练习2:
1.3.3、关于计划任务的一些知识
1)可以同一时间做多个吗?
是可以的。可以是一行一个计划,时间点是一样的;也可以都写到一个脚本里,直接做一个计划任务,推荐使用后边这个方法。
建议:最好不要同时做很多事情,会在一个时间点消耗服务器的cpu、内存、磁盘、带宽等资源。会给服务器制造很大的压力。
1.3.4、终止计划任务
可以把计划任务注释掉(建议使用这个),也可以进行删除。
1.4、如何知道计划任务是否已经执行
1.4.1、直接查看效果
1.4.2、crontab的日志文件
日志文件存在路径:/var/log/cron
记录哪些计划任务的生产、执行、修改等操作
时间、地点、人物、发生的事情
CROND[22489] CROND 是进程 [22489] 是crond的进程号,pid号
CMD 表示执行命令 command
2、关于计划任务的笔试题
2.1、每个用户都有自己的计划任务
每个用户的计划任务都会放在 /var/spool/cron 这个文件夹下边;每个用户都对应一个计划任务
图片解释:最后两个命令都表示着,每小时执行一次
2.2、这个用户没有登录是否计划任务也会执行?
不登录,计划任务任然会执行
crond 这个进程会每隔一分钟就到/var/spool/cron文件夹下加载所有的文件,执行里边的计划任务
2.2.1、如果不想某个用户的计划任务执行?
删除用户计划任务文件里的内容或者注释
2.2.2、普通用户是否可以查看其他普通用户的计划任务(crontab -l -u + 用户)
默认情况下,只有root用户可以查看任何人的计划任务,其他用户只能看自己的
2.3、root用户是否可以去管理其他用户的计划任务?
2.4、黑客是否会利用计划任务?
是,他可能会创建新的用户,或者得到root用户的密码之后使用root用户来执行自己的计划
2.5、你如何排查你的机器里是否有黑客添加的计划任务?
排查方法:到/var/spool/cron目录下查看是否有可以的计划任务文件;查看root用户本身的计划任务,是否有可疑的脚本执行
2.6、计划任务里的命令执行不了
是PATH变量的问题,建议使用命令的绝对路径
图片解释:这两个PATH变量的值是不一样的
3、root用户给普通用户创建计划任务(crontab -e -u 用户)与普通用户自己创建计划任务
4、计划任务小练习
练习一:
练习二:
如果有相同的文件的时候,使用cp命令的时候,系统会给予提醒,我们输入y就会执行覆盖,之前的同名文件。但是我们在后台不能输入y。所以要这样:
这样是直接使用命令的绝对路径来运行这个cp命令,因为我们直接使用cp命令是使用的别名"cp -i",-i,就是使用这个命令的时候,会提醒使用的人。
思考题:
1)如何查看这个机器里有哪些用户都创建了计划任务?
/var/spool/cron 中的这些文件名都对应着用户创建的计划任务
2)如何删除某个用户的计划任务?
把任务注释掉
5、前台和后台
计划任务执行脚本的时候,是在后台执行的,我们人看不到
前台:我们看的到的界面
后台:linux系统的后边执行,我们是看不到的,但是有进程可以看到,只是看不到界面。
在linux里命令后面借一个&符号,就是将这条命令放到后台执行
[root@fttsaxf linux]# vim create_dir_v2.sh & #把这个程序放在后台执行
[1] 1840
[root@fttsaxf linux]# jobs # 查看放到后台运行的有哪些程序
[1]+ 已停止 vim create_dir_v2.sh
[root@fttsaxf linux]# vim create_dir.sh &
[2] 1856
[root@fttsaxf linux]# jobs
[1]- 已停止 vim create_dir_v2.sh
[2]+ 已停止 vim create_dir.sh
[root@fttsaxf linux]# fg 1 # 将后台的编号为1的程序调到前台执行 foreground
vim create_dir_v2.sh
6、系统本身的计划任务
例如:日志文件的轮转,,每隔一段时间产生一个新的日志文件。updatae是用于更新/var/lib/mlocate这个文件的内容的命令,而这个locate查找命令的内容就是从这个文件中查找
/var/spool/cron 是存放用户的计划任务的,那么linux系统的后台的工作展开需要的计划任务存放在哪里呢?
6.1、关于黑客在linux计划任务中所要做的事(图解)
7、anacron服务
弥补cron在系统关机后不能执行计划任务的问题
8、扩展练习——实现每秒新建一个文件夹(python编程) ![](https://img-blog.csdnimg.cn/2371330493194b37a1faad15bb86d7d0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBARmFuTVlfNzE=,size_20,color_FFFFFF,t_70,g_se,x_16)
#!/usr/bin/python3
#导入os、time、datetime 库
import os
import time
import datetime
#判断/lianxi/test4文件夹是否存在
#os.path.exits() 判断文件是否存在
#os.mkdir() 新建文件夹
if not os.path.exits("/lianxi/test4"):
os.mkdir("/lianxi/test4")
#切换路径到/lianxi/test4
os.chdir("/lianxi/test4")
num = 1
#每一秒新建一个文件夹
while True:
#获得当前的时间
ctime = datetime.datetime.now().__format__("%F_%T")
#拼接文件名 sanchuang+时间
filename = f"sanchuang{ctime}"
#新建文件夹
os.mkdir(filename)
#暂停1秒,如果不暂停一秒,会疯狂产生大量的文件夹
time.sleep(1)
#统计新建的文件夹的数目
num += 1
"""
写到文件里(这个不需要考虑文件的关闭),若是使用
f = open("num.log","w")
# "w",是以写的方法打开文件,会覆盖里面的内容,相当于shell编程的 ">" 重定向
f.write(str(num)+"\n")
f.close
这个就是要关闭的
"""
#将num变量的值写到文件/lianxi/test4/num.log里
with open("/lianxi/test4/num.log","w") as f:
f.write(f"{num}\n")