计划任务(corntab)
计划任务
通俗一些计划任务就是进程,进程就是程序运行的过程。
计划任务的种类
例行性和突发性
- 例行性就是每隔一段时间执行
- 突发性就是做完以后就没有
at是突发性,相关的服务是atd
crontab是例行性,相对的服务是crond
关于Linux的例行任务
- 执行日志文件论循(logrotate)
- 日志文件分析(logwatch)
- 建立locate的数据库
- manpage查询数据库建立
- PRM软件日志文件的建立
- 删除缓存
- 与网络服务有关的分析操作
突发性任务
atd的启动与at运行的方式
启动atd服务
[root@localhost ~]# systemctl restart atd //重启atd服务
[root@localhost ~]# systemctl enable atd
//设置开启自启动
[root@localhost ~]# systemctl status atd//查看atd状态
● atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled) //是否开启开机自启动
Active: active (running) since Sun 2021-09-05 19:48:29 CST; 40s ago //是否正常运行
Main PID: 9865 (atd)
Tasks: 1 (limit: 21828)
Memory: 364.0K
CGroup: /system.slice/atd.service
└─9865 /usr/sbin/atd -f
9月 05 19:48:29 localhost.localdomain systemd[1]: Started Job spooling tools.
at产生任务,并将这个任务以文本文件的方式写入/var/spool/at目录内,该任务等待atd服务执行。当让为了安全也设立了对at的控制,对于at的控制还需要看etc/at.deny和etc/at.allow这两个文件。
etc/at.deny里面的用户是可以使用at的,没有的用户就不可以使用at即使at.allow没有也不可以.
任务写入成功后任务会存在与/var/spool/目录中
at.allow就是不可以所有的名单。
[root@localhost etc]# cat ./at.deny
//空
[root@localhost etc]# useradd admin //创建用户
[root@localhost etc]# passwd admin //设置密码
更改用户 admin 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost etc]# cat ./at.deny
//还是空
[root@localhost etc]# sudo -u admin at //可以使用
Garbled time
[root@localhost etc]# echo "admin"> ./at.deny //将admin写入到at.deny 也就是禁止名单
[root@localhost etc]# sudo -u admin at
You do not have permission to use at. //没有使用at的权限
如果两个文件的不存在则就是只有root可以使用at。
[zhaobo@localhost dev]$ at -h
-m 当at的任务完成,给任务拥有者发邮箱
-l 相当于atq,列出目前系统所有该用户的at
-v 时间格式列出at列表
-c 列出此任务的实际命令
time
hh:mm 04:00
hh:mm yyyy-mm-dd 04:00 2021-01-21
hh:mm[am|pm] [month][date] 04:00pm July 30
now+time 04pm+3days
尽量使用绝对路径来执行命令,避免因为PATH环境问题出现错误。 at的执行与终端环境无关,而所有的标准输入输出都会发送到用户的mailbox中,所以终端是看不到的。如果at shell内的命令并没有输出信息的话ta是不会给用户发邮件的,除非使用-m参数。
at还可以脱机运行,系统会将at任务独立出我们使用的shell中 而是交给系统的atd中,即使因为网路的问题 我们端口链接也依然是可以进行我们的任务的。
[zhaobo@localhost ~]$ at now + 1 hours
warning: commands will be executed using /bin/sh
at> echo "nihyaonuiijoiijoifewfwef" > /dev/pts/1
at> <EOT> <==== 用ctrl+d保存即可!
- batch
相对于at, batch会在系统负载小于0.8的时候运行程序。
uptime可以查看1分钟,5分钟,15分钟的平均任务负载。
循环执行任务
crontab [参数]
-u 定义用户 root用户帮助其他用户奖励crontab任务
-e编辑用户的crontab 一行一个任务
-l列出用户的crontab
-r删除用户所有的crontab
-n 设置host在集群中运行用户的crontabs
-x 开启调试
[zhaobo@localhost ~]$ crontab -l
10 * * * * echo "十分钟过去-----------------">/dev/pst1
分 时 日 月 周 命令
* 代表所有都可以接受
, 与
- 到
/n 每个n个单位后
---------------------------------------
每隔10分钟输出这段话
[zhaobo@localhost ~]$ crontab -l
*/10 * * * * echo "十分钟过去-----------------">/dev/pts/1
crontab 和at一样也拥有/etc/cron.allow和/etc/cron.deny而且用法相同。
对于crontab的任务会写入/var/spool/cron中,而且会以账号作为判断的依据,如果时tezx账号创建,最终的目录会是/var/spool/cron/tezx。
[zhaobo@localhost ~]$ vim /etc/cron
cron.d/ cron.daily/ cron.deny cron.hourly/ cron.monthly/ crontab cron.weekly/
不仅如此,和cron相关的还有上面这些,cron.d为crontab的配置脚本。
[zhaobo@localhost cron.d]$ cat ./0hourly
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly //意思就是大约5分钟内随机时间执行后面cron.hourly 所有sh,所以这里面必是sh脚本才行。
所以说我们可以将对于的脚本直接放到对应的cron目录中,自动施行。
- 个性化任务 crontab - e
- 系统维护 vim /etc/crontab
- 直接开发软件 vim /etc/cron.d/newfile
- 固定时间执行 /etc/crontab中集中实行,或者上面的特殊目录中,
那么如果我有一个任务是系统数据库备份,相当重要的任务,但是突然有一天停电了,那么再次开机cron还会执行吗!当然不会,所以解决这个问题出现了anancron.
anacron相关的文件是/etc/anacrontab
[zhaobo@localhost cron。d]美元anacron - h
用法:
Anacron [options] [job]…
anacron -T [-T anacrontab-file]
选项:
-s 开始连续执行,会根据时间判断是否执行
-f 强制执行作业,甚至在它们的时间之前
-n 无延迟地运行作业,即-s
-u更新时间戳而不实际运行任何东西
-S 选择一个不同的spool目录
有关更多细节,请参阅anacron(8)手册。
进程管理与SELinux初探
发生·任何一个事件时,系统都会将他定义为一个事件,每一个事件都有一个id,为Pid 。父进程可以引申出子进程,在子进程中父id为ppid。
##任务管理器(job control)
- 这些任务所触发的进程必须来自自己的shell的子进程(自己管理自己)
- 前台:可以控制与执行命令的这个环境称为前台的任务
- 后台:可以自动执行的任务,你无法使用[ctrl]+c终止,可使用bg、fg调用任务
- 后台不能等待terminal或者shell的输入
后台执行 &
我们可以通过在命令后面加入& 使得这条命令进入后台运行。当然根据上面说的,我们无法通过[ctrl]+c停止,以及输入。但是这种情况也是有弊端,如果前台正在操作突然后台的进程,弹出提示符也会影响前端的进程,所以最好的办法就是数据重定向。
将后台任务丢到后台中【暂停】:ctrl-z
当使用ctrl-z的时候系统会将进程放入后台且状态时{暂停},
查看后台任务 jobs
jobs则是查看后台进程的命令;
[zhaobo@localhost ~]$ jobs --helpjobs: jobs [-lnprs] [任务声明 ...] 或 jobs -x 命令 [参数] 显示任务状态。 列出活动的任务。JOBSPEC 限制仅输出指定的任务。 不带选项时,所有活动任务的状态都会显示。 选项: -l 在正常信息基础上列出进程号 -n 仅列出上次通告之后改变了状态的进程 -p 仅列出进程号 -r 限制仅输出运行中的任务 -s 限制仅输出停止的任务 如果使用了 -x 选项,ARG 参数中的所有任务声明会被替换为该任务 的进程组头领的进程号,然后执行 COMMAND 命令。 退出状态: 返回成功,除非使用了无效的选项或者有错误发生。 如果使用 -x 选项,则返回 COMMAND 命令的退出状态。
[zhaobo@localhost ~]$ jobs [1] 已停止 vim 1[2] 已停止 yum[3]- 已停止 yum upgrade[4]+ 已停止 vim 1
上面第一列为后台进程id 后面的-+代表的时最近添加的后台进程。
将后台任务拿到前台使用:fg
fg的使用很简单就是将之前的后台任务放到前台执行,但是又几个附加的选项。如果只输入fg则打开后面+的文件,也就是最近操作的文件,如果fg - 则打开倒数第二个操作的文件。如果要指定打开哪一个进程,直接可以fg 进程id。即可!
让后台进程运行:bg
当然我们又&的话 在后台时运行状态但是用ctrl+z则时暂停状态。bg则会将我们暂停的状态设置为运行状态。
[zhaobo@localhost ~]$ jobs[zhaobo@localhost ~]$ jobs[4] 已停止 vim 1[5]- 已停止 ping 192.12.94[6]+ 已停止 sudo find /etc /p* > ./2.txt[zhaobo@localhost ~]$ bg 6;jobs[6]+ sudo find /etc /p* > ./2.txt &[4]- 已停止 vim 1[5]+ 已停止 ping 192.12.94[6] 运行中 sudo find /etc /p* > ./2.txt & //&代表后台运行
杀死后台进程:kill
kill -9 立即强制删除一个任务
kill -15 以正常的方式终止一个任务。
进程管理
查看系统进程通过静态的ps和top查看。
ps
-A 显示所有进程-a 显示与终端无关的进程-u 有效者相关的进程x 可以列出比较完整的信息l 较长、较详细 pid也列出来j 任务格式-f 完整输出
[zhaobo@localhost ~]$ ps -lF S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD0 S 1000 2285 2278 0 80 0 - 12871 - pts/0 00:00:00 bash0 T 1000 2488 2285 0 80 0 - 11360 - pts/0 00:00:00 vim4 T 1000 2556 2285 0 80 0 - 8165 - pts/0 00:00:00 ping0 R 1000 3131 2285 0 80 0 - 11421 - pts/0 00:00:00 ps----------------------------------------------F代表进程的标识- 4代表为root-1 代表此子进程复制而没有执行S代表进程的状态-R 执行-S 休眠状态可唤醒-D 不可被唤醒-T 停止状态-Z 僵尸状态,进程终止但是内存暂时无法删除UID/PID/PPID:代表进程的所有者信息C:cpu使用率PRI/NI:cpu执行的优先级ADDR/SZ/WCHAN;内存相关TTY:登陆者的终端位置远程登录则为pts/nTIME:花费cpu时间CMD:命令[zhaobo@localhost ~]$ ps -auxUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.4 252428 14924 ? Ss 15:35 0:03 /usr/lib/systemd/systemd --switched-root --system --deserializroot 2 0.0 0.0 0 0 ? S 15:35 0:00 [kthreadd]root 3 0.0 0.0 0 0 ? I< 15:35 0:00 [rcu_gp]root 4 0.0 0.0 0 0 ? I< 15:35 0:00 [rcu_par_gp]root 6 0.0 0.0 0 0 ? I< 15:35 0:00 [kworker/0:0H-events_highpri]root 8 0.0 0.0 0 0 ? I 15:35 0:00 [kworker/u256:0-events_unbound]
ps -l 仅查看自己的bash相关的进程
ps -aux查看系统所有进程
pstree 进程树
如果命令后面又 则为僵尸进程,找到父进程优化!!!
top 动态进程
-d 后面接秒数,就是整个进程界面更新的秒数-b 数据重定向-n 执行几次-p 指定一个PID监测------------------------------------top执行中可以执行P cpu排序M memory排序N pid排序T cpu时间排序q
[zhaobo@localhost ~]$ ps -lF S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD0 S 1000 2285 2278 0 80 0 - 12871 - pts/0 00:00:00 bash0 T 1000 2488 2285 0 80 0 - 11360 - pts/0 00:00:00 vim4 T 1000 2556 2285 0 80 0 - 8165 - pts/0 00:00:00 ping0 R 1000 3131 2285 0 80 0 - 11421 - pts/0 00:00:00 ps[zhaobo@localhost ~]$ ps -auxUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.4 252428 14924 ? Ss 15:35 0:03 /usr/lib/systemd/systemd --switched-root --system --deserializroot 2 0.0 0.0 0 0 ? S 15:35 0:00 [kthreadd]root 3 0.0 0.0 0 0 ? I< 15:35 0:00 [rcu_gp]root 4 0.0 0.0 0 0 ? I< 15:35 0:00 [rcu_par_gp]root 6 0.0 0.0 0 0 ? I< 15:35 0:00 [kworker/0:0H-events_highpri]root 8 0.0 0.0 0 0 ? I 15:35 0:00 [kworker/u256:0-events_unbound]
NI越小越早执行,通过 r 输入PID输入值10
Renice PID 1 to value 10
进程的管理
kill -signal Pid
-signal则为信号
kaillall
-i 交互模式
-e exact的意思
-I 命令名称
Priority与nice值
Priority与进程执行优先级有关,直接关系进程的执行队列,Priority为内核动态调整,用户无法调整,但是我们可以用nice影响PRI。
- 可调范围-20~19
- root可以更改所有人的
- 一般用户范围.0~19
一开始执行进程就立即给予特定的nice值用:nice命令
调整某个已经存在的PID值用:renice
nice -n 数字 命令
renice 数字 PID
查看系统资源信息
free 查看内存使用情况
[zhaobo@localhost ~]$ free -m total used free shared buff/cache availableMem: 3469 707 1998 10 764 2491Swap: 4095 0 4095
free可以查看当前系统内存使用情况,如果不加参数显示为kb,我们交易通过加入m、g让其单位变为mbyte,Gbits。
mem代表物理内存
swap则为虚拟内存
total 总量
used使用量
free 剩余量
查看系统与内核信息
[zhaobo@localhost ~]$ uname --help用法:uname [选项]...输出一组系统信息。如果不跟随选项,则视为只附加 -s 选项。 -a, --all 以如下次序输出所有信息。其中若 -p 和 -i 的探测结果不可知则被省略: -s, --kernel-name 输出内核名称 -n, --nodename 输出网络节点上的主机名 -r, --kernel-release 输出内核发行号 -v, --kernel-version 输出内核版本 -m, --machine 输出主机的硬件架构名称 -p, --processor 输出处理器类型(不可移植) -i, --hardware-platform 输出硬件平台或(不可移植) -o, --operating-system 输出操作系统名称 --help 显示此帮助信息并退出 --version 显示版本信息并退出[zhaobo@localhost ~]$ uname -aLinux localhost.localdomain 4.18.0-305.12.1.el8_4.x86_64 #1 SMP Wed Aug 11 01:59:55 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
uptime查看系统启动时间与任务负载
内核产生的信息dmesg
检测系统资源变化
查看系统所有suid和Guid的命令 fing / -perm 6000
fuser 借由文件找出正在使用该文件的进程
lsof 列出被进程使用的文件
找出某个正在执行的PID
/proc/* 代表的意义
所有的进程的数据都写在内存中,所有的内存数据又会写在/proc/这个目录中
[zhaobo@localhost proc]$ ll总用量 0dr-xr-xr-x. 9 root root 0 9月 8 15:35 1dr-xr-xr-x. 9 root root 0 9月 8 15:35 10dr-xr-xr-x. 9 avahi avahi 0 9月 8 15:37 1031dr-xr-xr-x. 9 root root 0 9月 8 15:36 1033dr-xr-xr-x. 9 root root 0 9月 8 15:36 1041dr-xr-xr-x. 9 root root 0 9月 8 15:36 1046dr-xr-xr-x. 9 root root 0 9月 8 15:36 1047dr-xr-xr-x. 9 root root 0 9月 8 15:36 1060dr-xr-xr-x. 9 root root 0 9月 8 15:35 11dr-xr-xr-x. 9 root root 0 9月 8 15:36 1125dr-xr-xr-x. 9 root root 0 9月 8 15:36 1141dr-xr-xr-x. 9 root root 0 9月 8 15:36 1144dr-xr-xr-x. 9 root root 0 9月 8 15:36 1146dr-xr-xr-x. 9 root root 0 9月 8 15:36 1148dr-xr-xr-x. 9 root root 0 9月 8 15:36 1150dr-xr-xr-x. 9 root root 0 9月 8 15:35 12
每一个目录的数字就是进程的id数字。其中还又特殊的文件比如:
cmdline 这个进程被启动的命令串
environ 这个进程的环境变量。