linux计划任务

计划任务(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 这个进程的环境变量。

fuser找出进程正在使用的文件

lsof 列出被进程所使用的文件名称

pidof 找出某个正在执行的进程PID

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有命中注定

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值