马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
背面也会连续更新,学到新东西会在此中增补。
发起按序次食用,接待品评大概互换!
缺什么东西接待品评!我都会及时修改的!
在这里真的很感谢这位老师的教学视频让渺茫的我找到了很好的学习视频
王晓春老师的个人空间-王晓春老师个人主页-哔哩哔哩视频
任务操持
将来的某时间点实验一次任务
- at 指定时间点,实验一次性任务
- batch 体系自行选择空闲时间去实验此处指定的任务
周期性运行某任务
一次性任务 at
at工具
- 由包at提供
- 依靠与atd服务
- at队列存放在/var/spool/at目次中
- 实验任务时PATH变量值和当前用户身份同等
- [root@CentOS8 ~]# rpm -ql at
复制代码 包里包罗了很多可实验文件
- 服务开启是自动启动的
- [root@CentOS8 ~]# systemctl status atd.service
- ● atd.service - Job spooling tools
- Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset:>
- Active: active (running) since Wed 2024-12-18 12:52:16 CST; 6min ago
- Main PID: 1289 (atd)
- Tasks: 1 (limit: 12252)
- Memory: 424.0K
- CGroup: /system.slice/atd.service
- └─1289 /usr/sbin/atd -f
- Dec 18 12:52:16 CentOS8 systemd[1]: Started Job spooling tools.
复制代码 指定任务天生下令
- [root@CentOS8 ~]# at
- Garbled time
- at 后面需要跟上时间
- [root@CentOS8 ~]# date
- Wed Dec 18 13:00:38 CST 2024
- [root@CentOS8 ~]# at 13:10
- warning: commands will be executed using /bin/sh 如果写的脚本是以sh来执行的要符合sh的语法
- at> echo $PATH
- at> touch /data/at.log
- at> <EOT> ctrl + D退出
- job 1 at Wed Dec 18 13:10:00 2024
复制代码 检察任务是否天生
- [root@CentOS8 ~]# at -l
- 1 Wed Dec 18 13:10:00 2024 a root
复制代码 时间当了at.log天生了但是echo没有天生,由于不知道往哪个终端天生。
注意:
- 作业实验下令的效果中尺度输出和错误以用户身份发送邮件关照给 root
- 默认CentOS 8 最小化安装没有安装邮件服务,须要自行安装。
范例:
- [root@CentOS8 ~]# dnf install postfix -y
- [root@CentOS8 ~]# systemctl enable --now postfix
- [root@CentOS8 ~]# yum -y install mailx
- [root@CentOS8 ~]# rpm -qf /usr/bin/mail
复制代码
使掷中写的echo 由于不知道输出到哪就发邮箱给 root
- [root@CentOS8 ~]# mail
- Heirloom Mail version 12.5 7/5/10. Type ? for help.
- "/var/spool/mail/root": 2 messages 2 new
- >N 1 root Wed Dec 18 13:10 15/605 "Output from your job " 作业1
- N 2 [email protected] Wed Dec 18 13:17 14/566 "Output from your job " 作业2
- & 2
- Message 2:
- From [email protected] Wed Dec 18 13:17:00 2024
- Return-Path: <[email protected]>
- X-Original-To: root
- Delivered-To: [email protected]
- Subject: Output from your job 2
- To: [email protected]
- Date: Wed, 18 Dec 2024 13:17:00 +0800 (CST)
- From: [email protected]
- Status: R
- /home/wang/.local/bin:/home/wang/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
- 生成了路径信息。
复制代码 at 任务天生以后重启是否会丢失呢
- [root@CentOS8 ~]# su - wang
- [wang@CentOS8 ~]$ at 13:17
- warning: commands will be executed using /bin/sh
- at> echo $PATH
- at> touch wang.log
- at> <EOT>
- job 2 at Wed Dec 18 13:17:00 2024
- [wang@CentOS8 ~]$ at -l
- 2 Wed Dec 18 13:17:00 2024 a wang
- [wang@CentOS8 ~]$ ll /var/spool/at/
- ls: cannot open directory '/var/spool/at/': Permission denied
- [wang@CentOS8 ~]$ exit
- logout
- [root@CentOS8 ~]# ll /var/spool/at/
- total 4
- -rwx------. 1 wang wang 2552 Dec 18 13:14 a0000201b91b1d 在磁盘上保存了计划
- drwx------. 2 root root 6 Dec 18 13:10 spool
复制代码 at 实验逾期任务
- [root@CentOS8 ~]# su - wang
- [wang@CentOS8 ~]$ date
- Wed Dec 18 13:20:19 CST 2024
- [wang@CentOS8 ~]$ at 13:19
- warning: commands will be executed using /bin/sh
- at> wall test log
- at> <EOT>
- job 3 at Thu Dec 19 13:19:00 2024 在第二天的13:19执行
- [root@CentOS8 ~]# at -l
- 3 Thu Dec 19 13:19:00 2024 a wang
- [root@CentOS8 ~]# vi /var/spool/at/a0000301b920bf
复制代码
检察任务指定后文件
- [root@CentOS8 ~]# at -l
- 3 Thu Dec 19 13:19:00 2024 a wang
- [root@CentOS8 ~]# at -c 3
复制代码 删除任务
- [root@CentOS8 ~]# at -d 3
- [root@CentOS8 ~]# at -l
复制代码 为什么wang下令没有权限访问文件夹权限居然还可以天生文件?
- [wang@CentOS8 ~]$ ll /var/spool/at/
- ls: cannot open directory '/var/spool/at/': Permission denied
复制代码 由于suid,寻常用户实验at 相称于是酿成了 root
- [root@CentOS8 ~]# ll `which at`
- -rwsr-xr-x. 1 root root 61688 May 11 2019 /usr/bin/at
复制代码 不通过交互式通过尺度输入
- [root@CentOS8 ~]# date
- Wed Dec 18 13:36:42 CST 2024
- [root@CentOS8 ~]# echo wall at job | at 13:38
- warning: commands will be executed using /bin/sh
- job 4 at Wed Dec 18 13:38:00 2024
- [root@CentOS8 ~]# at -l
- 4 Wed Dec 18 13:38:00 2024 a root
复制代码 wall 广播下令只要在呆板上登录的用户会继承到信息由于是广播机制
通过文件重定向到at
- [root@CentOS8 data]# vi root.sh
- [root@CentOS8 data]# touch {1..10}.txt
- [root@CentOS8 data]# ll
- total 4
- -rw-r--r--. 1 root root 0 Dec 18 13:40 10.txt
- -rw-r--r--. 1 root root 0 Dec 18 13:40 1.txt
- -rw-r--r--. 1 root root 0 Dec 18 13:40 2.txt
- -rw-r--r--. 1 root root 0 Dec 18 13:40 3.txt
- -rw-r--r--. 1 root root 0 Dec 18 13:40 4.txt
- -rw-r--r--. 1 root root 0 Dec 18 13:40 5.txt
- -rw-r--r--. 1 root root 0 Dec 18 13:40 6.txt
- -rw-r--r--. 1 root root 0 Dec 18 13:40 7.txt
- -rw-r--r--. 1 root root 0 Dec 18 13:40 8.txt
- -rw-r--r--. 1 root root 0 Dec 18 13:40 9.txt
- -rw-r--r--. 1 root root 13 Dec 18 13:40 root.sh
- [root@CentOS8 data]# cat root.sh
- ls /data/ -l
- [root@CentOS8 data]# date
- Wed Dec 18 13:41:52 CST 2024
- [root@CentOS8 data]# at 13:43 < root.sh 重定向到at
- warning: commands will be executed using /bin/sh
- job 5 at Wed Dec 18 13:43:00 2024
- [root@CentOS8 data]# at -l
- 5 Wed Dec 18 13:43:00 2024 a root
复制代码
半小时触发
- [root@CentOS8 ~]# at now+30minutes
- warning: commands will be executed using /bin/sh
- at> wall class is over
- at> <EOT>
- job 6 at Wed Dec 18 14:17:00 2024
- [root@CentOS8 ~]# at -l
- 6 Wed Dec 18 14:17:00 2024 a root
复制代码 at 任务实验方式:
黑名单和白名单
- [root@CentOS8 ~]# ll /etc/at.deny
- -rw-r--r--. 1 root root 1 May 11 2019 /etc/at.deny
- [root@CentOS8 ~]# ll /etc/at.allow
- ls: cannot access '/etc/at.allow': No such file or directory
复制代码 黑名单如有效户放入则拒绝实验at下令
- [root@CentOS8 ~]# vi /etc/at.deny
- [root@CentOS8 ~]# cat !*
- cat /etc/at.deny
- wang
- [root@CentOS8 ~]# su - wang
- [wang@CentOS8 ~]$ at 15:33
- You do not have permission to use at.
复制代码 如果wang用户之前有任务
wang用户进入黑名单以后wang用户就不能再创建新的操持任务了不代表不能实验之前的任务。
用户在黑名单又在白名单
- [root@CentOS8 ~]# vi /etc/at.deny
- [root@CentOS8 ~]# vi /etc/at.allow
- [root@CentOS8 ~]# cat /etc/at.allow
- wang
- [root@CentOS8 ~]# cat /etc/at.deny
- wang
- [root@CentOS8 ~]# su - wang
- [wang@CentOS8 ~]$ at -l
- [wang@CentOS8 ~]$ at 12:00
- warning: commands will be executed using /bin/sh
- at> echo 123
- at> <EOT>
- job 7 at Thu Dec 19 12:00:00 2024
- [wang@CentOS8 ~]$ at -l
- 7 Thu Dec 19 12:00:00 2024 a wang
复制代码 是可以实验任务的。allow的优先级高级deny
周期性任务操持 cron
- [wang@CentOS8 ~]$ rpm -q cronie
- cronie-1.5.2-4.el8.x86_64
- [wang@CentOS8 ~]$ rpm -ql cronie
- /etc/cron.d
- /etc/cron.d/0hourly
- ....
复制代码
- [wang@CentOS8 ~]$ systemctl status crond
- ● crond.service - Command Scheduler
- Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
- Active: active (running) since Wed 2024-12-18 12:52:16 CST; 1h 17min ago
- Main PID: 1285 (crond)
- Tasks: 1 (limit: 12252)
- Memory: 3.6M
- CGroup: /system.slice/crond.service
- └─1285 /usr/sbin/crond -n
复制代码
- [wang@CentOS8 ~]$ ll /etc/cron.* -d
- drwxr-xr-x. 2 root root 39 Dec 17 18:00 /etc/cron.d
- drwxr-xr-x. 2 root root 23 Dec 17 17:58 /etc/cron.daily
- -rw-r--r--. 1 root root 0 Nov 9 2019 /etc/cron.deny
- drwxr-xr-x. 2 root root 22 Dec 17 17:58 /etc/cron.hourly
- drwxr-xr-x. 2 root root 6 Jan 12 2021 /etc/cron.monthly
- drwxr-xr-x. 2 root root 6 Jan 12 2021 /etc/cron.weekly
复制代码
- [wang@CentOS8 ~]$ ll /usr/bin/run-parts
- -rwxr-xr-x. 1 root root 1983 Jan 12 2021 /usr/bin/run-parts
- [wang@CentOS8 ~]$ /usr/bin/run-parts
- Usage: run-parts [--list | --test] <dir>
复制代码 Usage: run-parts [--list | --test] <dir> 背面允许跟一个文件夹把背面这个文件夹里的全部可实验文件举行实验,将来可以把干的活放到这一个文件夹内里
- [root@CentOS8 data]# vi f1.sh
- [root@CentOS8 data]# vi f2.sh
- [root@CentOS8 data]# cat f1.sh
- #!/bin/bash
- echo f1.sh
- [root@CentOS8 data]# cat f2.sh
- #!/bin/bash
- echo f2.sh
复制代码 利用run-parts 实验文件夹内里全部可实验文件
- [root@CentOS8 data]# chmod +x /data/*
- [root@CentOS8 data]# run-parts /data/
- /data/f1.sh:
- f1.sh
- /data/f2.sh:
- f2.sh
复制代码 cron 依靠于crond服务,确保crond保卫处于运行状态:
- #CentOS 7 以后版本
- systemctl status crond
- #CentOS 6:
- service crond status
复制代码 任务区别
体系记录的操持任务通常来讲要写入总的设置文件想改须要有权限
- [root@CentOS8 data]# ll /etc/crontab
- -rw-r--r--. 1 root root 451 Jan 12 2021 /etc/crontab
- [root@CentOS8 data]# vi /etc/crontab
复制代码
- 空格不限
- * 就是每一天
- 5,7 星期5星期7
- 9-12 9天10天11天12天
- 01 * * * *每小时的第一分钟
- root 用户
- echo $PATH 下令
分时天月星期
- 1 15 18,19,20 * 3-4 root echo $PATH
- root 用户打印 echo $PATH 每个月的18,19,20天 15:01 星期三星期四
复制代码 检察日记服务
- [root@CentOS8 data]# tail /var/log/cron -f
- Dec 18 13:43:01 CentOS8 anacron[1414]: Normal exit (1 job run)
- Dec 18 14:01:01 CentOS8 CROND[3523]: (root) CMD (run-parts /etc/cron.hourly)
- Dec 18 14:01:01 CentOS8 run-parts[3523]: (/etc/cron.hourly) starting 0anacron
- Dec 18 14:01:01 CentOS8 run-parts[3523]: (/etc/cron.hourly) finished 0anacron
- Dec 18 14:17:00 CentOS8 atd[3598]: Starting job 6 (a0000601b91b59) for user 'root' (0)
- Dec 18 14:26:55 CentOS8 run-parts[3629]: (/data/) starting f1.sh
- Dec 18 14:26:55 CentOS8 run-parts[3629]: (/data/) finished f1.sh
- Dec 18 14:26:55 CentOS8 run-parts[3629]: (/data/) starting f2.sh
- Dec 18 14:26:55 CentOS8 run-parts[3629]: (/data/) finished f2.sh
- Dec 18 14:54:01 CentOS8 crond[1285]: (*system*) RELOAD (/etc/crontab)
复制代码
检察邮件内里的输出信息
- You have new mail in /var/spool/mail/root
- [root@CentOS8 ~]# mail
- 如果想删除邮件文件
- [root@CentOS8 cron.daily]# rm -rf /var/spool/mail/*
复制代码
须要注意的是环境变量
比寻常的实验路径少了很多
新建一个文件实验下令放在/etc/cron.d文件夹下
- [root@CentOS8 ~]# cd /etc/cron.d
- [root@CentOS8 cron.d]# ll
- total 8
- -rw-r--r--. 1 root root 128 Nov 9 2019 0hourly
- -rw-r--r--. 1 root root 108 Aug 10 2021 raid-check
- [root@CentOS8 ~]# cat /etc/cron.d/0hourly
- # Run the hourly jobs
- SHELL=/bin/bash
- PATH=/sbin:/bin:/usr/sbin:/usr/bin
- MAILTO=root
- 01 * * * * root run-parts /etc/cron.hourly //扫描文件夹里面所有可执行文件进行执行每小时第1分钟
- 新建一个任务文件
- [root@CentOS8 cron.d]# vi test.sh
- [root@CentOS8 cron.d]# cat test.sh
- SHELL=/bin/bash
- PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
- MAILTO=root
- * * * * * root echo $PATH 每分钟打印执行路径
复制代码
/etc/crontab 是总的操持! /etc/cron.d/目次下可以写各自的周期操持。
- [root@CentOS8 cron.daily]# ls /etc/anacrontab
- /etc/anacrontab
- [root@CentOS8 cron.daily]# cat !*
- cat /etc/anacrontab
- # /etc/anacrontab: configuration file for anacron
- # See anacron(8) and anacrontab(5) for details.
- SHELL=/bin/sh
- PATH=/sbin:/bin:/usr/sbin:/usr/bin
- MAILTO=root
- # the maximal random delay added to the base delay of the jobs
- RANDOM_DELAY=45 随机延迟为了防止计划任务过多
- # the jobs will be started during the following hours only
- START_HOURS_RANGE=3-22
- 凌晨3点到22点之间 自动会启动这个功能
- #period in days delay in minutes job-identifier command
- 1 5 开机五分钟以后检测 cron.daily nice run-parts /etc/cron.daily
- 检测关机导致没有每天执行的任务
- 7 25 cron.weekly nice run-parts /etc/cron.weekly
- 开机25分钟以后检测关机导致没有每周执行一次
- @monthly 45 cron.monthly nice run-parts /etc/cron.monthly
复制代码 纵然关机了没实验开机了也会自动的给实验。
logrotate 日记的处置处罚
- [root@CentOS8 cron.daily]# pwd
- /etc/cron.daily
- [root@CentOS8 cron.daily]# ll
- total 4
- -rwxr-xr-x. 1 root root 189 Jan 4 2018 logrotate
复制代码
创建操持任务
crontab -e 默认是当前用户创建操持任务
crontab -e -u wang 指定用户创建操持任务
- [root@CentOS8 cron.daily]# su - wang
- [wang@CentOS8 ~]$ crontab -e
- 30 2 1-10,20 * 1-5 wang echo $PATH
- 每个月 1-10号+20号 周一到周五 凌晨2点30 输出路径变量
- [wang@CentOS8 ~]$ man crontab
- [wang@CentOS8 ~]$ man 5 crontab
复制代码
- "30 4 1,15 * 5" would cause a command to be run at 4:30 am on the 1st and 15th of each month, plus every Friday.
- 将导致命令在每个月 1 日和 15 日以及每个星期五的凌晨 4:30 运行。
复制代码 日期号和星期的关系是或
修改表现格式
- [root@CentOS8 ~]# vi /etc/profile.d/env.sh
- [root@CentOS8 ~]# cat !*
- cat /etc/profile.d/env.sh
- export EDITOR=vim
- editor是系统自带的变量,影响了很多管理工具默认的文本编辑器。
- editor 修改了系统调用让他调用的是vim
复制代码 须要把窗口关掉才见效。
口试题
11月的天天的6-12点之间每隔2小时实验/app/bin/test.sh
- */10 每十分钟的意思 10-50/10 每隔10分钟执行一次
- 0 6-12/2 * 11 * /app/bin/test.sh
复制代码 每两分钟实验一次
*/1 就是 *
crontab -e 不消输入用户名
- [root@RockyLinux9 ~]#crontab -e
- */2 * * * * echo $PATH
- [root@RockyLinux9 ~]#crontab -l
- */2 * * * * echo $PATH
复制代码
- [root@CentOS8 ~]# crontab -e
- crontab: installing new crontab
- [root@CentOS8 ~]# crontab -l
- */2 * * * * echo $PATH
- */2 * * * * useradd haha
复制代码
路径没有包罗/usr/sbin 因此下令没有实验乐成!
办理方案把全部路径信息都输入!
- [root@CentOS8 ~]# crontab -l
- PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
- */1 * * * * echo $PATH
- */1 * * * * useradd haha;echo $PATH
复制代码
- 清除定时任务
- [root@CentOS8 ~]# crontab -r
- [root@CentOS8 ~]# crontab -l
- no crontab for root
复制代码 crontab -e的文件放在哪的呢?
/var/spool/cron/
- [root@CentOS8 ~]# crontab -e
- no crontab for root - using an empty one
- crontab: installing new crontab
- [root@CentOS8 ~]# crontab -l
- * * * * * echo $PATH
- [root@CentOS8 ~]# cat /var/spool/cron/root
- * * * * * echo $PATH
- [root@CentOS8 ~]# su - wang
- [wang@CentOS8 ~]$ crontab -e
- no crontab for wang - using an empty one
- crontab: installing new crontab
- [wang@CentOS8 ~]$ crontab -l
- * * * * * echo $PATH
- [wang@CentOS8 ~]$ ls /var/spool/cron/
- ls: cannot open directory '/var/spool/cron/': Permission denied
- [wang@CentOS8 ~]$ exit
- logout
- You have new mail in /var/spool/mail/root
- [root@CentOS8 ~]# ls /var/spool/cron/
- root wang
复制代码 表现每10分钟表现磁盘信息
sed 万能的
- [root@CentOS8 ~]# df | sed -En '/^\/dev\/sd/s@^([^ ]+).* ([0-9]+)%.*@\1 \2@p'
- /dev/sda1 23
- [root@CentOS8 data]# vi disk_check.sh
- You have new mail in /var/spool/mail/root
- [root@CentOS8 data]# cat disk_check.sh
- #!/bin/bash
- WARNING=10 #警告变量
- #while read DEVICE USE 逐行处理device 和 use
- df | sed -En '/^\/dev\/sd/s@^([^ ]+).* ([0-9]+)%.*@\1 \2@p' | while read DEVICE USE;do
- [ $USE -gt $WARNING ] && echo "$DEVICE will be full,USE:$USE" | mail -s diskfull root
- done
- [root@CentOS8 data]# bash disk_check.sh
- [root@CentOS8 data]# chmod +x disk_check.sh
复制代码
将我们写好的脚本放入周期操持
- [root@CentOS8 data]# crontab -e
- no crontab for root - using an empty one
- crontab: installing new crontab
- [root@CentOS8 data]# crontab -l
- * * * * * disk_check.sh
- [root@CentOS8 data]# mv disk_check.sh /usr/bin/
复制代码
方法二:
- [root@CentOS8 data]# mv /usr/bin/disk_check.sh /data/
- [root@CentOS8 data]# crontab -l
- * * * * * /data/disk_check.sh
复制代码
打包目次到指定目次下
- #!/bin/bash
- tar cf /opt/nginx_access_log_`date +%F_%H_%M_%S`.tar.gz /app/nginx/logs/* &> /dev/null
复制代码 试验一下:
- [root@CentOS8 data]# vi tar.sh
- [root@CentOS8 data]# cat tar.sh
- #!/bin/bash
- tar cf /data/data_`date +%F_%H_%M_%S`.tar.gz /data/* &> /dev/null
- [root@CentOS8 data]# crontab -e
- crontab: installing new crontab
- [root@CentOS8 data]# crontab -l
- PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
- * * * * * /data/tar.sh
复制代码
乐成 !
须要注意的题目
%表现下令竣事%背面的内容作为下令的stdin
- [root@CentOS8 data]# crontab -l
- PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
- * * * * * /bin/cp -a /etc/ /data/etc`date +\%F_\%T`
复制代码
写操持脚本有尺度输出 %这种不要直接用
由于默认都会把输出和错误以邮件方式发送
写操持脚本和人机交互脚本的风格是不一样的
最好把尺度输出给隐蔽起来
不能写成*/7 60/7除不尽的
可以用sleep操纵
- [root@CentOS8 data]# date;sleep 7m;echo test;date
- Wed Dec 18 22:56:35 CST 2024
复制代码
训练
待续这里
参考文献
3一次性和周期性操持任务_哔哩哔哩_bilibili
4周期性操持任务cron_哔哩哔哩_bilibili
总结
全部下令都须要反复敲来实验来影象,本人根本上是个人明白加参考其他大佬的肯定有很多题目接待指正,我会及时修改。
|