Linux计划任务
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux计划任务相关的知识,希望对你有一定的参考价值。
博文结构
什么是例行性工作调度
仅执行一次的工作调度
循环执行的例行性工作调度
可唤醒停机期间的工作任务
一.什么是例行性工作调度?
(1)两种工作调度方式
一种是例行性的,就是每隔一定的周期要来办的事项
一种是突发性的,就是这次做完以后就没有的那一种
(2)Linux下面达到这俩个功能
at :at 是个可以处理仅执行一次就结束调度的指令,不过要执行 at 时, 必须要有 atd 这个服务 的支持才行。在 某些新版的 distributions 中,atd 可能默认并没有启动,那么 at 这个指令就会失效呢!不过我们的 CentOS 默认是启动的!
crontab :crontab 这个指令所设置的工作将会循环的一直进行下去! 可循环的时间为分钟、小时、每周、每月或每年等。 crontab 除了可以使用指令执行外,亦可编辑 /etc/crontab 来支持。 至于让 crontab 可以生效的服务则是 crond 这个服务
(3)基本上 Linux 系统常见的例行性任务有
进行登陆文件的轮替
登录文件分析logwatch的任务(主动分析登录信息工具)
创建locate的数据库(通过已经存在的文件名数据库来进行系统上文件名的查询)
Man page查询数据库的创建(对应man page的数据库)
RPM软件登录文件的创建(由于软件的经常变更,系统自动追踪)
移除暂存盘
与网络服务有关的分析行为(eg:apache登录文件)
[root@localhost ~]# systemctl start atd 启动atd服务
[root@localhost ~]# systemctl enable atd 设置开机自启
(4)at 的工作情况:
先找寻 /etc/at.allow 这个文件,写在这个文件中的使用者才能使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在 at.deny 当中);
如果 /etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 文件中的使用者,就可以使用 at 咯;
如果两个文件都不存在,那么只有 root 可以使用 at 这个指令
常用参数如下:
[root@localhost ~]# at now +5 minutes 过5分钟后将root下得文件寄给自己
at> /bin/mail -s :testing at job" root < /root/.bashrc ctrl + d 保存
at> <EOT>
job 1 at Tue Nov 26 13:42:00 2019
[root@localhost ~]# atq 查看后台得进程
1 Tue Nov 26 13:42:00 2019 a root
[root@localhost ~]# at -c 1 查看任务详细信息
#!/bin/sh
atrun uid=0 gid=0
#mail root 0
umask 22
XDG_VTNR=1; export XDG_VTNR
SSH_AGENT_PID=11988; export SSH_AGENT_PID
XDG_SESSION_ID=1; export XDG_SESSION_ID
HOSTNAME=localhost.localdomain; export HOSTNAME
IMSETTINGS_INTEGRATE_DESKTOP=yes; export IMSETTINGS_INTEGRATE_DESKTOP
GPG_AGENT_INFO=/run/user/0/keyring/gpg:0:1; export GPG_AGENT_INFO
SHELL=/bin/bash; export SHELL
XDG_MENU_PREFIX=gnome-; export XDG_MENU_PREFIX
VTE_VERSION=3804; export VTE_VERSION
HISTSIZE=1000; export HISTSIZE
略。。。。。
[root@localhost ~]# at 23:00 2019-11-26 11月26号晚上11点关机
at> /bin/sync
at> /bin/sync
at> /sbin/shuwdown -h now ctrl + d 结束保存
[root@localhost ~]# atq
3 Tue Nov 26 23:00:00 2019 a root
[root@localhost ~]# atrm 3 删除任务
[root@localhost ~]# atq
[root@localhost ~]#
二.循环执行的工作调度
[root@localhost ~]# crontab -e
进入文本编辑任务
选项与参数如下:
-u: 只有root才能进行这个任务,帮其他创建,移除工作调度
-e: 编辑crontab的工作内容
-l : 查阅crontab的工作内容
-r : 移除所有的crontab的工作内容
举例:
[root@localhost ~]# crontab -e
crontab: no changes made to crontab
[root@localhost ~]# crontab -l
分钟 小时 日期 月份 周期 指令
0 * * * * /usr/ls
[root@localhost ~]# 代表每月每天每小时的第 0 分钟执行一次 /bin/ls
* 代表每
三.什么是 anacron
由于 anacron 默认会以一天、七天、一个月为期去侦测系统未进行的 crontab 任务,因此对于某些特殊的使用环境非常有 帮助。 举例来说,如果你的 Linux 主机是放在公司给同仁使用的,因为周末假日大家都不在所以也没有必要打开, 因此你的 Linux 是周末都会关机两天的。但是 crontab 大多在每天的凌晨以及周日的早上进行各项任务, 偏偏你又关机了,此时系统很多 crontab 的任务就无法进行。 anacron 刚好可以解决这个问题
那么 anacron 又是怎么知道我们的系统啥时关机的呢?这就得要使用 anacron 读取的时间记录文件 (timestamps) 了! anacron 会去分析现在的时间与时间记录文件所记载的上次执行 anacron 的时间,两者比较后若发现有差异, 那就是在某些时刻没 有进行 crontab 啰!此时 anacron 就会开始执行未进行的 crontab 任务了
常用参数如下:
crond 与 anacron 的关系:
crond 会主动去读取 /etc/crontab, /var/spool/cron/, /etc/cron.d/ 等配置文件,并依据“分、时、日、月、周”的时间设置去各项工作调度;
根据 /etc/cron.d/0hourly 的设置,主动去 /etc/cron.hourly/ 目录下,执行所有在该目录下的可执行文件;
因为 /etc/cron.hourly/0anacron 这个指令档的缘故,主动的每小时执行 anacron ,并调用 /etc/anacrontab 的配置文件;
根据 /etc/anacrontab 的设置,依据每天、每周、每月去分析 /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/ 内的可执行文 件,以进行固定周期需要执行的指令。
以上是关于Linux计划任务的主要内容,如果未能解决你的问题,请参考以下文章