linux系统定时任务及延迟任务

前言

对服务器的运维基本在凌晨进行,所以程序uan提前写好,在凌晨执行。

延迟任务

1.延迟任务的发起

[root@rhel8_node1 ~]# at 05:13
at> rm -fr /mnt/* (执行内容)
at>[ctrl]+[d](任务发起)

查看任务队列:at -l

[root@rhel8_node1 ~]# at -l
3	Sat Mar 28 05:17:00 2020 a root

查看任务内容:at -c 任务号

[root@rhel8_node1 ~]# at -c 3
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
LS_COLORS=rs=0:di=38\;5\;33:ln=38\;5\;51:mh=00:pi=40\;38\;5\;11:so=38\;5\;13:do=38\;5\;5:bd=48\;5\;232\;38\;5\;11:cd=48\;5\;232\;38\;5\;3:or=48\;5\;232\;38\;5\;9:mi=01\;05\;37\;41:su=48\;5\;196\;38\;5\;15:sg=48\;5\;11\;38\;5\;16:ca=48\;5\;196\;38\;5\;226:tw=48\;5\;10\;38\;5\;16:ow=48\;5\;10\;38\;5\;21:st=48\;5\;21\;38\;5\;15:ex=38\;5\;40:\*.tar=38\;5\;9:\*.tgz=38\;5\;9:\*.arc=38\;5\;9:\*.arj=38\;5\;9:\*.taz=38\;5\;9:\*.lha=38\;5\;9:\*.lz4=38\;5\;9:\*.lzh=38\;5\;9:\*.lzma=38\;5\;9:\*.tlz=38\;5\;9:\*.txz=38\;5\;9:\*.tzo=38\;5\;9:\*.t7z=38\;5\;9:\*.zip=38\;5\;9:\*.z=38\;5\;9:\*.dz=38\;5\;9:\*.gz=38\;5\;9:\*.lrz=38\;5\;9:\*.lz=38\;5\;9:\*.lzo=38\;5\;9:\*.xz=38\;5\;9:\*.zst=38\;5\;9:\*.tzst=38\;5\;9:\*.bz2=38\;5\;9:\*.bz=38\;5\;9:\*.tbz=38\;5\;9:\*.tbz2=38\;5\;9:\*.tz=38\;5\;9:\*.deb=38\;5\;9:\*.rpm=38\;5\;9:\*.jar=38\;5\;9:\*.war=38\;5\;9:\*.ear=38\;5\;9:\*.sar=38\;5\;9:\*.rar=38\;5\;9:\*.alz=38\;5\;9:\*.ace=38\;5\;9:\*.zoo=38\;5\;9:\*.cpio=38\;5\;9:\*.7z=38\;5\;9:\*.rz=38\;5\;9:\*.cab=38\;5\;9:\*.wim=38\;5\;9:\*.swm=38\;5\;9:\*.dwm=38\;5\;9:\*.esd=38\;5\;9:\*.jpg=38\;5\;13:\*.jpeg=38\;5\;13:\*.mjpg=38\;5\;13:\*.mjpeg=38\;5\;13:\*.gif=38\;5\;13:\*.bmp=38\;5\;13:\*.pbm=38\;5\;13:\*.pgm=38\;5\;13:\*.ppm=38\;5\;13:\*.tga=38\;5\;13:\*.xbm=38\;5\;13:\*.xpm=38\;5\;13:\*.tif=38\;5\;13:\*.tiff=38\;5\;13:\*.png=38\;5\;13:\*.svg=38\;5\;13:\*.svgz=38\;5\;13:\*.mng=38\;5\;13:\*.pcx=38\;5\;13:\*.mov=38\;5\;13:\*.mpg=38\;5\;13:\*.mpeg=38\;5\;13:\*.m2v=38\;5\;13:\*.mkv=38\;5\;13:\*.webm=38\;5\;13:\*.ogm=38\;5\;13:\*.mp4=38\;5\;13:\*.m4v=38\;5\;13:\*.mp4v=38\;5\;13:\*.vob=38\;5\;13:\*.qt=38\;5\;13:\*.nuv=38\;5\;13:\*.wmv=38\;5\;13:\*.asf=38\;5\;13:\*.rm=38\;5\;13:\*.rmvb=38\;5\;13:\*.flc=38\;5\;13:\*.avi=38\;5\;13:\*.fli=38\;5\;13:\*.flv=38\;5\;13:\*.gl=38\;5\;13:\*.dl=38\;5\;13:\*.xcf=38\;5\;13:\*.xwd=38\;5\;13:\*.yuv=38\;5\;13:\*.cgm=38\;5\;13:\*.emf=38\;5\;13:\*.ogv=38\;5\;13:\*.ogx=38\;5\;13:\*.aac=38\;5\;45:\*.au=38\;5\;45:\*.flac=38\;5\;45:\*.m4a=38\;5\;45:\*.mid=38\;5\;45:\*.midi=38\;5\;45:\*.mka=38\;5\;45:\*.mp3=38\;5\;45:\*.mpc=38\;5\;45:\*.ogg=38\;5\;45:\*.ra=38\;5\;45:\*.wav=38\;5\;45:\*.oga=38\;5\;45:\*.opus=38\;5\;45:\*.spx=38\;5\;45:\*.xspf=38\;5\;45:; export LS_COLORS
SSH_CONNECTION=192.168.0.10\ 33708\ 192.168.0.11\ 22; export SSH_CONNECTION
LANG=en_US.UTF-8; export LANG
HISTCONTROL=ignoredups; export HISTCONTROL
HOSTNAME=rhel8_node1.westos; export HOSTNAME
XDG_SESSION_ID=4; export XDG_SESSION_ID
USER=root; export USER
SELINUX_ROLE_REQUESTED=; export SELINUX_ROLE_REQUESTED
PWD=/root; export PWD
HOME=/root; export HOME
SSH_CLIENT=192.168.0.10\ 33708\ 22; export SSH_CLIENT
SELINUX_LEVEL_REQUESTED=; export SELINUX_LEVEL_REQUESTED
XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share; export XDG_DATA_DIRS
SSH_TTY=/dev/pts/1; export SSH_TTY
MAIL=/var/spool/mail/root; export MAIL
SHELL=/bin/bash; export SHELL
XMODIFIERS=@im=none; export XMODIFIERS
SELINUX_USE_CURRENT_RANGE=; export SELINUX_USE_CURRENT_RANGE
SHLVL=1; export SHLVL
LOGNAME=root; export LOGNAME
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus; export DBUS_SESSION_BUS_ADDRESS
XDG_RUNTIME_DIR=/run/user/0; export XDG_RUNTIME_DIR
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin; export PATH
HISTSIZE=1000; export HISTSIZE
LESSOPEN=\|\|/usr/bin/lesspipe.sh\ %s; export LESSOPEN
cd /root || {
	 echo 'Execution directory inaccessible' >&2
	 exit 1
}
${SHELL:-/bin/sh} << 'marcinDELIMITER75cd62c4'

rm -fr /mnt/*
marcinDELIMITER75cd6

取消任务: at -r 任务号

[root@rhel8_node1 ~]# at -r 3

2.当延迟任务有输出,输出会以邮件形式发送到任务发起者邮箱中

查找并安装mail

没有mail
[root@rhel8_node1 ~]# mail
bash: mail: command not found...
Failed to search for file: Cannot update read-only repo
寻找mail
[root@rhel8_node1 ~]# dnf whatprovides /bin/mail
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Last metadata expiration check: 0:30:03 ago on Sat 28 Mar 2020 04:54:33 AM CST.
mailx-12.5-29.el8.x86_64 : Enhanced implementation of the mailx command
Repo        : BaseOS
Matched from:
Filename    : /bin/mail
安装mail
[root@rhel8_node1 ~]# dnf install mailx-12.5-29.el8.x86_64
执行mail
[root@rhel8_node1 ~]# mail
No mail for root

安装邮件服务:dnf install mailx postfix

[root@rhel8_node1 ~]# dnf install postfix -y

开启邮件服务并启用

systemctl start postfix
systemctl enable postifx

给root用户编写邮件

[root@rhel8_node1 ~]# mail root
Subject: xixi
I
come
again
.              (.代表结尾)
EOT

查看root用户的邮件

[root@rhel8_node1 ~]# mail -u root
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/mail/root": 1 message
>   1 root                  Sat Mar 28 05:32  21/597   "hello"
& 
Message  1:
From root@rhel8_node1.westos  Sat Mar 28 05:32:37 2020
Return-Path: <root@rhel8_node1.westos>
X-Original-To: root
Delivered-To: root@rhel8_node1.westos
Date: Sat, 28 Mar 2020 05:32:37 +0800
To: root@rhel8_node1.westos
Subject: hello 
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
From: root <root@rhel8_node1.westos>
Status: RO

i
miss
you

清空root邮件

[root@rhel8_node1 ~]# > /var/mail/root

root用户没有邮件

[root@rhel8_node1 ~]# mail -u root
No mail for root

编写延时任务,此命令有输出但不会显示到字符设备中,此命令输出会用邮件发送给at发起人

[root@rhel8_node1 ~]# at 05:47
warning: commands will be executed using /bin/sh
at> timedatectl
at> <EOT>
job 4 at Sat Mar 28 05:47:00 2020

查看邮件

[root@rhel8_node1 ~]# mail -u root
Heirloom Mail version 12.5 7/5/10.Type ? for help.
"/var/mail/root": 1 message 1 new
	>N 1 root Sat Feb 22 10:27 27/1226 "Output from your job "(at输出邮件)
& 1(输入邮件编号查看)
&q(退出)

3.at命令的控制
控制黑名单,此名单中的人不能执行at

[root@rhel8_node1 ~]# vim /etc/at.deny 
hai
测试:
[root@rhel8_node1 ~]# su - hai
[hai@rhel8_node1 ~]$ date
Sat Mar 28 06:07:49 CST 2020
[hai@rhel8_node1 ~]$ at 06:10
You do not have permission to use at.

/etc/at.allow##此文件默认不存在
##当此文件存在/etc/at.deny不生效
##当此文件存在系统普通用户默

定时任务

crond (定时任务服务)

1.crond 设定方式
命令设定方式:(用户级别定时任务)
设定crontab -u root -e

[root@rhel8_node1 ~]# crontab -u root -e
43 18 28 03 06 rm -fr /mnt/*

查看crontab -u root -l

[root@rhel8_node1 ~]# crontab -u root -l
43 18 28 03 06 rm -fr /mnt/*

删除crontab -u root -r

[root@rhel8_node1 ~]# crontab -u root -r
[root@rhel8_node1 ~]# cat /var/spool/cron/root
cat: /var/spool/cron/root: No such file or directory

任务存储位置/var/spool/cron/root

root@rhel8_node1 ~]# cat /var/spool/cron/root
43 18 28 03 06 rm -fr /mnt/*

设定模板:

时间 任务
分钟 小时 天 月 周 系统命令脚本

例子:

08-17 * * * *##每天每小时08分-17分
08-17 * * * 3,5##每周3和周五每小时08分-17分
08-17/2 * * * 3,5##每周3和周五每小时08分-17分时间段每隔2分钟
08-17/2 10 * * 3,5##每周3和周五10点08分-17分时间段每4隔2分钟
08-17/2 10 5 * 3,5##每周3和周五及每月5号10点08分-17分时间段每隔2分钟
08-17/2 10 5 3 3,5##3月每周3和周五及3月5号10点08分-17分时间段每隔2分钟

配置文件方式设定: (系统级别cron,只有超级用户可操作)
系统级别cron设定文件存放路径:/etc/cron.d

[root@rhel8_node1 ~]# cd  /etc/cron.d
[root@rhel8_node1 cron.d]# ls
0hourly  raid-check

编写设定:
cron设定文件时间用户动作在/etc/cron.d/westos

vim /etc/cron.d/westos
* * * * *root  rm -fr /mnt/*

其他目录:

/etc/cron.daily/(每天任务)
/etc/cron.hourly/(每小时任务)
/etc/cron.monthly/(每月任务)
/etc/cron.weekly/(每周执行动作)

例:

[root@rhel8_node1 etc]# cd cron.hourly/
[root@rhel8_node1 cron.hourly]# vim clean_mnt
rm -fr /mnt/*
[root@rhel8_node1 cron.hourly]# chmod +x clean_mnt(赋予执行权限)

2.用户级别crond控制设定
cron用户名单,用法同at.deny,可参考上方博客

vim /etc/cron.deny(黑名单)
vim /etc/cron.alow(白名单)

后记

不难理解,需记忆练习

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章