Linux 周期任务

简介: Linux 周期任务

一次性任务#


在某个特定的时间,执行一次后被清除


相关命令/进程#


  • at 命令
  • atd进程


在centos6中,系统服务的名称: /etc/init.d/atd


查看系统上该进程时候启动:


[root@ecs-t6-large-2-linux-20190824103606 ~]# ps -ef | grep atd
root      4472     1  0 Sep04 ?        00:00:00 /usr/sbin/atd -f
root      9628  9222  0 18:21 pts/0    00:00:00 grep --color=auto atd


创建一次性任务#


格式:

  • at [HH:MM]
  • at [HH:MM] [yyyy-mm-dd]
  • at now + 数字 [minutes |hours | days | weeks]

例: 创建定时任务, 在下一分钟,创建一个文件


[root@ecs-t6-large-2-linux-20190824103606 init.d]# at 18:33
at> touch 123
at> <EOT>
job 3 at Sat Sep 14 18:33:00 2019
[root@ecs-t6-large-2-linux-20190824103606 init.d]# ll
total 44
-rw-r--r--  1 root root     0 Sep 14 18:33 123


保存定时任务快捷键 ctrl + d


将文件中的命令当作定时任务#


格式: at 时间 -f 文件

例: 五分钟后执行 /root/test.sh


at now + 5 minutes -f /root/test.sh


查询当前系统上的一次性定时任务#


  • 命令1:


at -l
[root@ecs-t6-large-2-linux-20190824103606 init.d]# at -l
没任何结果说明没有一次性任务


  • 命令2:


atq
[root@ecs-t6-large-2-linux-20190824103606 init.d]# atq
没任何结果说明没有一次性任务
[root@ecs-t6-large-2-linux-20190824103606 init.d]# atq
5 Sat Sep 14 20:00:00 2019 a root
5  是任务号


根据任务编号删除指定的一次性任务#


  • 命令1


atrm [编号]


  • 命令2


at -d


查看一次性任务的具体内容#


at -c [任务号]


创建的一次性任务文件所在位置#


/var/spool/at/a*

在这个路径下,全部a开头的文件都在这里面


[root@ecs-t6-large-2-linux-20190824103606 init.d]# ll /var/spool/at/
total 8
-rwx------  1 root root 3085 Sep 14 18:37 a00005018ee170
drwx------. 2 root root 4096 Sep 14 18:33 spool


任务执行过之后,这个文件就会消失


在那些文件中显示哪些用户是否可以使用定时任务#


  • /etc/at.deny :这个名单中的用户不可以使用定时任务
  • /etc/at.allow: 这个名单中的用户可以使用


周期性任务#


按照预订的计划重复执行任务


相关命令/进程#


  • crontab命令
  • crond进程


在centos6中,周期任务对应的服务是: /etc/init.d/crond

查看系统上该进程是否被启动


[root@ecs-t6-large-2-linux-20190824103606 ~]# ps -ef | grep crond
root      4474     1  0 Sep04 ?        00:00:00 /usr/sbin/crond -n
root      9699  9222  0 18:23 pts/0    00:00:00 grep --color=auto crond


创建的周期任务文件所在位置#


/var/spool/cron/用户名

所以查看系统上是否存在周期任务可以如下:


[root@ecs-t6-large-2-linux-20190824103606 init.d]# cat  /var/spool/cron/root 
5 11 * * * /tmp/touch_file


cron 服务的配置文件#


[root@ecs-t6-large-2-linux-20190824103606 init.d]# cat /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed


注意上面的PATH,这个PATH可能和系统中的PATH不同,这就意味着,当我们命令行敲某些命令时可以根据系统的PATH找到这些命令,但是如果周期任务的PATH中缺少一些路径,就可能导致周期运行命令时失败


  • 查看系统的PATH, (我的默认是完全相同的)


[root@ecs-t6-large-2-linux-20190824103606 init.d]# echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin


如果真的出现了不能执行的命令怎么办? 可以在命令前面加上绝对路径 /bin/ 命令

例子: 创建一个脚本文件


[root@ecs-t6-large-2-linux-20190824103606 tmp]# cat touch_file 
touch a$RANDOM


执行这个脚本


[root@ecs-t6-large-2-linux-20190824103606 tmp]# bash touch_file 
[root@ecs-t6-large-2-linux-20190824103606 tmp]# ll
total 48
-rw-r--r-- 1 root root     0 Sep 14 18:59 a21698


给这个脚本添加x, 让其可执行


[root@ecs-t6-large-2-linux-20190824103606 tmp]# chmod +x touch_file 
[root@ecs-t6-large-2-linux-20190824103606 tmp]# ll
-rwxr-xr-x 1 root root    15 Sep 14 18:59 touch_file


再次执行:


[root@ecs-t6-large-2-linux-20190824103606 tmp]# ./touch_file 
[root@ecs-t6-large-2-linux-20190824103606 tmp]# ll
total 48
-rw-r--r-- 1 root root     0 Sep 14 18:59 a21698
-rw-r--r-- 1 root root     0 Sep 14 19:01 a3460


当我们切换到其他目录时, 只能通过添加绝对路径才能运行脚本


[root@ecs-t6-large-2-linux-20190824103606 tmp]# bash /tmp/touch_file


添加到周期任务中


查看cron服务的日志文件#


/var/log/cron

从这个日志文件中可以看到历史任务执行记录


管理cron计划任务#


  • 编辑计划任务:crontab -e [-u 用户名]
  • 查看计划任务:crontab -l [-u 用户名]
  • 删除计划任务:crontab -r [-u 用户名]


周期任务的格式


[root@ecs-t6-large-2-linux-20190824103606 init.d]# cat /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
*           *               *                   *                *
分钟      小时            日期                月份            星期
0-59      0-23             1-31              1-12            0-7
0  17  *  *  1- 5     周一到周五的每天17:00
30  8  *  *  1,3,5       星期1,3,5 每天八点半
0  8-18  *  *  *          每天的8-18点
0  12     *  *            每隔三天的12点


系统级别的计划任务及其扩展anacrontab#


适用于下面的两种情况

linux 主机存在定时任务, 但主机又不是时时刻刻开机, 通过如下配置,可以实现, 一开机执行错过的定时任务

我有一个脚本, 需要每天都运行一次,但是什么时候运行我们并不关心,但是得运行


[root@ecs-t6-large-2-linux-20190824103606 ~]# 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
# 每天的3点到22点 都可能会启动任务
START_HOURS_RANGE=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
@monthly 45 cron.monthly    nice run-parts /etc/cron.monthly


这个延迟的解释是 , 假如我的八点开机的, 八点在 3-22点之间, 但是任务不会一开机立即执行, 会延迟[5分钟]执行

延迟也可以是 0-45 随机时间

run-parts 命令

run-parts + 路径

执行该目录下的脚本

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
数据可视化 Linux 测试技术
Linux系统之部署nullboard任务管理工具
【4月更文挑战第4天】Linux系统之部署nullboard任务管理工具
119 11
|
7月前
|
存储 前端开发 Linux
Linux系统之部署ToDoList任务管理工具
【4月更文挑战第1天】Linux系统之部署ToDoList任务管理工具
166 1
|
1月前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
76 2
|
3月前
|
消息中间件 分布式计算 Java
Linux环境下 java程序提交spark任务到Yarn报错
Linux环境下 java程序提交spark任务到Yarn报错
51 5
|
4月前
|
监控 数据挖掘 Linux
Linux服务器PBS任务队列作业提交脚本的使用方法
【8月更文挑战第21天】在Linux服务器环境中,PBS任务队列能高效管理及调度计算任务。首先需理解基本概念:作业是在服务器上执行的任务;队列则是等待执行任务的列表,具有不同的资源限制与优先级;节点指分配给作业的计算资源。
723 4
|
4月前
|
监控 Linux 调度
在Linux中,如何进行调度任务?什么是 crontab 并解释 crontab 中的字段?
在Linux中,如何进行调度任务?什么是 crontab 并解释 crontab 中的字段?
|
3月前
|
Linux 调度
linux中几种任务的优先级
linux中几种任务的优先级
|
4月前
|
Linux Perl
在Linux中,系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?
在Linux中,系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?
|
4月前
|
监控 安全 Linux
在Linux中,如何编写自动化脚本来执行重复性任务?
在Linux中,如何编写自动化脚本来执行重复性任务?
|
4月前
|
Linux Shell 开发工具
在Linux中,如何编写一个脚本来自动执行日常任务?
在Linux中,如何编写一个脚本来自动执行日常任务?