第一章:Linux的例行性工作(计划任务)

单一执行的例行性任务--at(一次性)

安装:

[root@server ~]# yum install at -y

[root@server ~]# at -V

启动服务:

 [root@server ~]# systemctl start  atd
[root@server ~]# systemctl  status  atd  # 查看状态      

at命令详解:

格式:

at         -参数        日期

参数:

-m:当任务完成后,即使没有标准输出,也会给用户发送邮件
-l:列出系统上所有用户的at任务,等价于atq

-d:删除或取消一个任务
-v:使用时间格式,列出at任务
-c:可以列出任务之后的命令内容
-f:从文件中读取

日期:

参数 说明
HH:MM 在今天HH小时的MM分钟执行,若时间点错过,将在明天执行
HH:MM YYYY-MM-DD 规定在某年某月的某一天的特殊时刻执行该工作
now +2 minutes 从现在开始的minutes、hours、days、weeks执行

 实验:

实验1:延迟执行 ls/root,并将结果写入到at.txt中

[root@server ~]# at  14:17
warning: commands will be executed using /bin/sh
at> ls  /root  >  at.txt
at>      # 点击ctrl+d 结束交互性界面
[root@server ~]# at  -l   # 查看已存在的计划任务
[root@server ~]# atq      # 同上

 实验2:不使用交互性命令实现,通过管道符命令执行

[root@server ~]# echo "echo 'hello' >> at.txt" at | at now + 1 minute

注意:

  • at命令只要指定的时间正确,就可以执行对应的命令
  • at命令的输出结果不会显示在屏幕上
  • at命令执行的过程中最好是使用绝对路径
  • 过程:输入at 时间>回车>输入执行的命令>ctrl+d退出at
  • at命令只会执行一次
at命令执行过程分析
  • 第一步:寻找/etc/at.allow (白名单)是否存在,写在该文件中用户才可执行at命令

  • 第二步:若/etc/at.allow不存在,则寻找/etc/at.deny(黑名单)文件,写在该文件中的用户不能使用at命令

  • 第三步:若两个文件都不存在则只有root用户可以使用at命令

  • 注意:若拒绝某用户使用at命令则可以将用户名写入到/etc/at.deny中

实验3:设置某账户at命令不可用

[root@server ~]# useradd guqinghan
[root@server ~]# passwd guqinghan
[root@server ~]# tail -l /etc/passwd
guqinghan:x:1001:1001::/home/guqinghan:/bin/bash
[root@server ~]# vim /etc/at.deny
[root@server ~]# su guqinghan
[guqinghan@server root]$ cd ~
[guqinghan@server ~]$ at 19:22
You do not have permission to use at.

[qinghan@server root]$ su root
Password: 
su: Permission denied        #拒绝登录

#安全考虑,openEuler做了用户权限切换限制,解决方法如下
#解决办法:
[qinghan@server root]$ exit        推出qinghan用户

[root@server ~]# vim /etc/pam.d/su
# 注释掉第21行:
# auth          required        pam_wheel.so use_uid
切换到qinghan用户再切换回root用户即可

循环执行的例行性任务--crontab(周期性)

crontd服务

  • crond 是 Linux 下用来周期地执行某种任务或等待处理某些事件的一个守护进程,在安装完成操作系统后,默认会安装 crond 服务工具,且 crond 服务默认就是自启动的,若需要安装则执行如下命令

 [root@server ~]# yum install crontabs
Last metadata expiration check: 0:11:01 ago on Thu 14 Nov 2024 07:43:13 PM CST.
Package crontabs-1.11-23.oe2203sp3.noarch is already installed.
Dependencies resolved.
Nothing to do.
Complete!

[root@server ~]# systemctl status crond
● crond.service - Command Scheduler
     Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset>
     Active: active (running) since Thu 2024-11-14 19:33:42 CST; 21min ago
   Main PID: 922 (crond)
      Tasks: 1 (limit: 8764)
     Memory: 976.0K
     CGroup: /system.slice/crond.service
             └─ 922 /usr/sbin/crond -n

Nov 14 19:33:42 server systemd[1]: Started Command Scheduler.
Nov 14 19:33:42 server crond[922]: (CRON) STARTUP (1.6.1)
Nov 14 19:33:42 server crond[922]: (CRON) INFO (Syslog will be used instead of sen>
Nov 14 19:33:42 server crond[922]: (CRON) INFO (RANDOM_DELAY will be scaled with f>
Nov 14 19:33:42 server crond[922]: (CRON) INFO (running with inotify support)

  • crond 进程每分钟会定期检查是否有要执行的任务,如果有,则会自动执行该任务,crontab 命令需要 crond 服务支持

  • linux 任务调度的工作主要分为以下两类:

    • 系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存

    • 个人执行的工作:某个用户定期要做的工作,例如每隔 10 分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置

crontab工作过程

  • 当系统中有 /etc/cron.allow 文件时,只有写入此文件的用户可以使用 crontab 命令,没有写入的用户不能使用 crontab 命令。同样,如果有此文件,/etc/cron.deny 文件会被忽略,因为 /etc/cron.allow 文件的优先级更高

  • 当系统中只有 /etc/cron.deny 文件时,写入此文件的用户不能使用 crontab 命令,没有写入文件的用户可以使用 crontab 命令

  • crontab 执行的每一项工作都会被 记录到 /var/log/cron 这个日志文件中

  • 当用户使用 crontab 新建工作之后,该项工作就会被记录到 /var/spool/cron/目录里面

crontab命令格式:

crontab  [-u  user]  [-l| -r | -e] 

参数:
 

参数 解释 示例
-l list 查看定时任务 crontab -l
-e edit 编辑定时任务,建议手动编辑 crontab -e
-i 删除定时任务,提示用户确认删除,避免出错 crontab -i
-r 删除定时任务,移除/var/spool/cron/username文件 crontab -r
-u user 指定用户执行任务,root 可以管理普通用户计划任务 crontab -u redhat -l

编辑crontab

格式:crontab -e

写入的命令格式:每一行书写一个工作,每个工作共有6个字段

代表意义 分钟 小时 日期 月份 星期 命令
数字范围 0-59 0-23 1-31 1-12 0-7(0和7表示周日) 执行的动作
特殊字符
特使字符 含义
* 任意时刻
- 表示时间范围
,(逗号) 分割时段
*/数字 指定时间间隔的频率,如:每3分钟执行一次,*/3

实验四:编写脚本test1.sh 

# 编写test脚本

[root@server ~]# vim  test1.sh

#!/bin/bash
while :
do
        echo  "this is my test sh"$(date)  >>  /root/cro.txt
        sleep  1
done    

#设置循环周期任务

[root@server ~]# crontab  -e
*/1 * * * *   sh   /root/test1.sh

# 查看任务
[root@server ~]# crontab  -l
*/1 * * * * sh  /root/test.sh
# 删除任务
[root@server ~]# crontab  -r   
[root@server ~]# crontab  -l   

# 周期性任务删除了,循环还在,还需要终止循环进程

[root@server ~]# ps  -aux  |  grep  test1
[root@server ~]# kill  进程号

实验五:设置邮件发送告警功能,每1分钟发送一封邮件

点击设置 > 账号 > 找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 > 管理服务 >  下拉找到授权码。

安装邮件服务:

[root@server ~]# yum  install  mailx  -y

配置邮件服务

[root@server ~]# vim  /etc/mail.rc
# 最后一行添加以下内容:
set  [email protected]
set  smtp=smtp.qq.com
set  [email protected]
set  smtp-auth-password=授权码
set  smtp-auth=login

测试邮件服务

[root@server ~]# echo  "testmail"  |  mail  -s  "testmail"  [email protected]

设定任务时间

[root@server ~]# crontab  -e
[email protected]

* * * * *   echo  "警告,SERVER服务器内存较低,速处理"  |  mail -v -s  "告警邮件"  [email protected]  

你可能感兴趣的:(RHCE,linux,运维,服务器)