当前位置: 首页 > news >正文

了解linux计划任务

本章主要介绍如何创建计划任务
  • 使用 at 创建计划任务
  • 使用 crontab 创建计划任务
有时需要在某个指定的时间执行一个操作,此时就要使用计划任务了。计划任务有两种:
一个是at计划任务,另一个是 crontab计划任务。
下面我们分别来看这两种计划任务的使用方法。
21.1 at
at计划任务是一次性的,到了指定的时间点就开始执行指定的命令,执行完成之后,不会
重复执行这个命令。
首先查看系统中是否存在at计划任务,命令是atq或at -1(字母1),命令如下。
[root@pp ~]# atq
[root@pp ~]# at -l
[root@pp ~]# 

这两个命令都没有任何输出,说明当前系统中并不存在任何计划任务。下面开始创建at计 划任务,at的用法如下。

1 at 时间点 <按【Enter】键>
2 > 输入要执行的命令
3 Ctrl+D 提交
例如,要在2025年12月12日执行hostname命令,命令如下。
[root@pp ~]# at 2025-12-12
warning: commands will be executed using /bin/sh
at> hostname
at> <EOT>
job 1 at Fri Dec 12 00:35:00 2025
[root@pp ~]# 
这里只是指定了日期,并没有指定在2025年12月12日的几点执行。那么,创建这个计划
任务时是几点几分,例如,这里是在19点11分创建的at计划任务,那么到了2025年12月12
日的19点11分就要自动执行hostname命令了。
如果要指定某个时间点,格式如下。
1 at 时间 日期 <按【Enter】键>
2 > 输入要执行的命令
3 Ctrl+D 提交
注意
(1)这里是24小时制的,所以10:00指的是上午10点,如果想指定下午10点,则要写成22:00。
(2)写时间最多只能精确到分,不能精确到秒。
这里上午用am表示,下午用pm表示。例如,要在2025年12月12日下午10点执行
hostname命令,命令如下。
[root@pp ~]# at 10pm 2025-12-12
warning: commands will be executed using /bin/sh
at> hostname
at> <EOT>
job 2 at Fri Dec 12 22:00:00 2025
[root@pp ~]# 
at也支持某天之后的某个时间点运行一个命令。例如,要在3天之后的下午4点执行,
hostname命令,命令如下。
[root@pp ~]# at 4pm + 3days
warning: commands will be executed using /bin/sh
at> hostname
at> <EOT>
job 3 at Mon Dec 11 16:00:00 2023
[root@pp ~]# 
这里“+”两边有没有空格都可以,days可以换成weeks,表示3周之后的下午4点。
用关键字tomorrow,如果使用关键字tomorrow,则不需要加“+”,命令如下。
[root@pp ~]# at 4pm tomorrow
warning: commands will be executed using /bin/sh
at> hostname
at> <EOT>
job 4 at Sat Dec  9 16:00:00 2023
[root@pp ~]# 
上面的两条命令都是表示第二天的下午4点执行hostname命令。

如果要表示几分钟或几小时之后,可以用关键字now。例如,要在2小时之后执行
hostname命令,命令如下。
[root@pp ~]# at now+2hours
warning: commands will be executed using /bin/sh
at> hostname
at> <EOT>
job 5 at Fri Dec  8 02:40:00 2023
[root@pp ~]# 

21.2 crontab

at计划任务是一次性的,执行完成就结束,不会重复执行。如果想定期执行某个任务,例
如,每周日凌晨2点执行一个命令,这时就要用到crontab了。
查看当前用户是否有 crontab计划任务,可以用crontab-1命令。如果要查看其他用户是
否有crontab计划任务,可以用“crontab -1-u用户名”命令,不过-u选项只有root才能
用。
步骤①:使用root用户查看自己有没有crontab计划任务,命令如下。
[root@pp ~]# crontab -l
no crontab for root
[root@pp ~]# 
步骤②:使用root用户查看iu用户是否有crontab计划任务,命令如下。
[root@pp ~]# crontab -l -u iu
no crontab for iu
[root@pp ~]# 
创建crontab计划任务的命令是crontab -e,如果为其他用户创建crontab计划任务,则
用“crontab -e -u用户名”命令。当使用crontab-e命令时,会打开一个临时文件,用与
vim 一样的语法来编辑此文件即可。先按【i】键进入插入模式,编辑完成之后,按【Esc】
键退回到命令模式,在末行模式中输入“wq”保存退出。在此文件中凡是以“#”开头的,都
是注释行。
crontab定义计划任务的语法如下。
1 分 时 天 月 周 命令
注意
因为在crontab中使用的并非系统的PATH变量,所以此处语法中要执行的命令最好能加上路径,
例如,要执行ifconfig命令,则写作/sbin/ifconfig;要执行hostname命令,则写作
bin/hostname。命令的路径可以通过which命令来查询。

几个时间单位的意义如下。
(1)分:几点几分的分。
(2)时:几点,24小时制。
(3)天:几号。
(4)月:几月份。
(5)周:星期几。
这几个时间单位可以用空格,也可以用【Tab】键来分隔。
如果不考虑某个时间单位,例如,不管今天是几号,只要不是周末我们就上班,不考
虑“天”的情况下,那么可以用*表示。
这里每个时间点都可以写多个值,用英文逗号“,”隔开,例如,在分的位置写“0,1.,5,10",
表示0分、1分、5分、10分。
也可以用横杠“-”表示“到”的意思,例如,在分的位置写“0-10”,表示0到10分。
这里“0-10”的完整写法是“0-10/1”,表示从0分到10分的每一分钟,从0开始每次增
加1,然后到10。如果表示“每N分钟”,则写成“0-10/N”,例如,0到10中每2分钟,则
写成“0-10/2”,表示0分、2分、4分、6分、8分、10分。
练习1:每天上午7点整执行hostname命令,如果写成如下命令。
1 # 分 时 天 月 周
2 * 7 * * * hostname
这种写法是不对的,第一个位置是分,这里写成了*,表示7点的每一分,包括0分、1
分……但是所谓7点整的意思是7点0分,所以要写成如下命令。
练习2:每周一到周五的上午7点整执行hostname命令,命令如下。
1 # 分 时 天 月 周
2 0 7 * * 1,2,3,4,5 hostname
现在最终的crontab计划任务内容如下。
[root@pp ~]# crontab -l
0 7 * * * hostname
0 7 * * 1,2,3,4,5 hostname[root@pp ~]
如果要编辑 crontab计划任务,通过crontab -e来重新编辑;如果要删除,执行 crontab -
r命令即可
普通用户也是可以创建crontab计划任务的,如果不想让这个用户创建crontab计划任务,
则把这个用户写入/etc/cron.deny中即可,一行一个用户。这个文件默认为空,命令如下。
[root@pp ~]# cat /etc/cron.deny 
[root@pp ~]# 
如果不希望iu用户创建crontab计划任务,则把tom用户写入这个文件中,命令如下。
[root@pp ~]# echo iu > /etc/cron.deny 
[root@pp ~]# cat /etc/cron.deny 
iu
[root@pp ~]# 
如果又想让 tom用户可以创建crontab计划任务,有以下两种方法。
(1)把tom用户从/etc/cron.deny 中删除,这种方法大家自行练习。
(2)创建/etc/cron.allow,这个文件默认不存在,把tom用户名写到此文件中,命令如
下。
[root@pp ~]# echo > /etc/cron.allow
[root@pp ~]# 
现在tom既出现在/etc/cron.allow中,又出现在/etc/cron.deny中
在第二个标签中用tom登录,crontab计划任务是能够创建的。
系统中也自带一些crontab计划任务,在/etc 中存在几个以cron开头的目录,命令如下。
[root@pp ~]# ls /etc/cron*
/etc/cron.allow  /etc/cron.deny  /etc/crontab/etc/cron.d:
0hourly  raid-check/etc/cron.daily:
logrotate/etc/cron.hourly:
0anacron/etc/cron.monthly:/etc/cron.weekly:
[root@pp ~]# 
每天都会执行一次/etc/crondaily中的脚本,每小时都会执行一次/etc/cron.hourly中的
脚本,每月都会执行一次/etc/cron.monthly中的脚本,每周都会执行一
次/etc/cron.weekly中的脚本。

相关文章:

  • NumPy学习:NumPy(Numerical Python)基础(一)
  • Java 22种设计模式详解
  • debian11,debian 如何删除虚拟内存,交换分区
  • UE5 树叶飘落 学习笔记
  • 创建第一个 Flink 项目
  • XUbuntu22.04之8款免费UML工具(一百九十七)
  • 【Flink on k8s】- 12 - Flink kubernetes operator 的高级特性
  • 在目标检测的图框标注中注意一下几点
  • java中用thumbnailator依赖写一个压缩图片的类,只要图片大小超过1M就无线循环下去的详细代码实例?
  • 【ARM Trace32(劳特巴赫) 使用介绍 13 -- Trace32 变量篇】
  • 得帆云助力容百科技构建CRM系统,实现LTC全流程管理
  • 【管理运筹学】背诵手册(七)| 网络计划与排队论
  • 游戏架构之面向对象模型和组件模型
  • 【ML】softmax简单理解。
  • 【IC前端虚拟项目】工程目录组织说明
  • 【css3】浏览器内核及其兼容性
  • git 常用命令
  • Java,console输出实时的转向GUI textbox
  • laravel5.5 视图共享数据
  • LeetCode18.四数之和 JavaScript
  • maven工程打包jar以及java jar命令的classpath使用
  • Puppeteer:浏览器控制器
  • python学习笔记-类对象的信息
  • QQ浏览器x5内核的兼容性问题
  • Solarized Scheme
  • Zepto.js源码学习之二
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 构造函数(constructor)与原型链(prototype)关系
  • 详解NodeJs流之一
  • 小程序开发之路(一)
  • 学习使用ExpressJS 4.0中的新Router
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • puppet连载22:define用法
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • #Z0458. 树的中心2
  • (python)数据结构---字典
  • (Ruby)Ubuntu12.04安装Rails环境
  • (安卓)跳转应用市场APP详情页的方式
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (一)基于IDEA的JAVA基础12
  • (转)甲方乙方——赵民谈找工作
  • .net 调用php,php 调用.net com组件 --
  • .NET中GET与SET的用法
  • ??在JSP中,java和JavaScript如何交互?
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [04] Android逐帧动画(一)
  • [AIGC] Java 和 Kotlin 的区别
  • [Angular] 笔记 18:Angular Router
  • [BZOJ1178][Apio2009]CONVENTION会议中心
  • [cogs2652]秘术「天文密葬法」
  • [HDU3710]Battle over Cities
  • [IE编程] IE8 新增的C++开发接口
  • [IE编程] 如何获得IE版本号