百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Linux下的计划任务at,batch,crontab使用技巧

bigegpt 2024-08-12 14:26 2 浏览

前言:

研究下linux下的计划任务,能够执行计划任务有3个命令at,batch,crontab,所谓的计划任务就是定时启动某个程序,可以是一组shell脚本,也可以是单一的输出。

计划任务at命令:

at在ubuntu,kali里面都是没有预先装好的,首先用安装at。

apt-get install at

查看使用帮助

at --help
#回显
at: invalid option -- '-'
Usage: at [-V] [-q x] [-f file] [-mMlbv] timespec ...
 at [-V] [-q x] [-f file] [-mMlbv] -t time
 at -c job ...
 atq [-V] [-q x]
 at [ -rd ] job ...
 atrm [-V] job ...
 batch

看到batch也安装了,也说明了其实他们是一类的工具,之后再讲batch。

首先at的参数含义

-V       参看版本
-q x      使用x队列,可以理解为它有几组任务,每组相互独立,x就是组号。一般以abcd....英文来区别不同队列
-f file    使用文件
-m       给用户发送邮件
-M       不给用户发送邮件
-l       显示设置任务列表 
-d x      删除编号为x的任

首先来设置个输出hello的shell命令,这里的<EOT>是按ctrl+D来提交任务,使用的相对时间后移5min,在桌面创建个1.txt并写入hello linux

root@ubuntu:~/Desktop# at now +5 min
warning: commands will be executed using /bin/sh
at> echo "hello linux" > 1.txt
at> <EOT>
job 6 at Wed Mar 6 05:21:00 2019

可以查看任务

root@ubuntu:~/Desktop# at -l
6 Wed Mar 6 05:21:00 2019 a root
root@ubuntu:~/Desktop# 

使用不同队列查看任务,就会发现运行的时候是默认a队列,所以b队列看不到这个任务

root@ubuntu:~/Desktop# at -q a -l
6 Wed Mar 6 05:21:00 2019 a root
root@ubuntu:~/Desktop# at -q b -l
root@ubuntu:~/Desktop#

时间到了,文本自动生成

除了能够使用相对时间以外,还可以使用绝对时间来进行定时操作

root@ubuntu:~/Desktop# at 5:27
warning: commands will be executed using /bin/sh
at> echo "hello sijidou"
at> <EOT>
job 7 at Wed Mar 6 05:27:00 2019
root@ubuntu:~/Desktop# 

使用-d来进行任务的删除,删除-d带的参数是最前面那个编号,这里是7,上面那个例子的编号是6

root@ubuntu:~/Desktop# at -l
7 Wed Mar 6 05:27:00 2019 a root
root@ubuntu:~/Desktop# at -d 7
root@ubuntu:~/Desktop# at -l
root@ubuntu:~/Desktop# 

任务无论是删除,还是到时间正常运行,它都是累加的使用file来进行命令设置,首先创建个2.txt,写入命令

然后使用-f 2.txt参数来设置任务

root@ubuntu:~/Desktop# at -f 2.txt now +1 min
warning: commands will be executed using /bin/sh
job 8 at Wed Mar 6 05:33:00 2019
root@ubuntu:~/Desktop#

时间到了之后,产生了3.txt文件

因为linux下的文件,其实后缀用处不大,都是看用什么指令来解释文件的内容的,看warning都知道这里at使用的/bin/sh,所以就把2.txt的内容当做shell来解释的,最后说明下两个和at有稍微区别的atq和atrm不一的,atq 列出当前的计划任务效果同 "at -l" 一样。

atrm 删除计划任务

root@ubuntu:~/Desktop# at -f 2.txt now +1 min 
warning: commands will be executed using /bin/sh 
job 10 at Wed Mar 6 05:36:00 2019
root@ubuntu:~/Desktop# at -f 2.txt now +1 min
warning: commands will be executed using /bin/sh
job 11 at Wed Mar 6 05:36:00 2019
root@ubuntu:~/Desktop# atq
10 Wed Mar 6 05:36:00 2019 a root
11 Wed Mar 6 05:36:00 2019 a root
root@ubuntu:~/Desktop# atrm 10
root@ubuntu:~/Desktop# atq
11 Wed Mar 6 05:36:00 2019 a root
root@ubuntu:~/Desktop#

最后是关于使用at权限问题,因为at可以使用/bin/sh啊,这个权限还是不错的,能够限制权限的地方在安装at后,在/etc/目录下存在

at.deny  #一开始存在的,它默认是空,它会限制里面的用户不能使用at
at.allow  #刚安装好,并没有这个文件,但是如果创建它,它只会允许里面的用户使用at
在at.allow和at.deny都存在的情况下,看at.allow
在at.allow和at.deny都不存在的情况下,只能root使用a

但是我测试了下,at.allow中,如果没有root,但是root还是能用at

计划任务batch命令:

batch同at一样都是没有默认安装的,但是安装at的时候就带了batch,但是batch不需要设置时间,那么不需要设置时间,它的任务是怎么执行的呢,在系统平均负载量降到 0.8 以下时执行某项一次性的任务

我这里直接输入了,就直接蹦出来了,说明此时平均负载量很低,也就是系统很清闲,没有大量运算

batch支持些命令

-f file 使用文件里面的shell脚本
-q x    将计划任务加入某个队列
-m    发送邮件给用户

还可以看到上面截图是job 14,说明它这个任务表和at是一起的,batch相当于at命令的一部分

计划任务crontab命令:

在渗透测试中,如果linux下的计划任务设置最常使用的就是crontab命令了吧,因为相比较at命令,它首先是默认安装的(我的kali和新装的ubuntu都有),其次它与at不同在于,at只能定时某次的时间然后运行一次,而crontab能够设置每天多久自启动的计划任务,可以一次设置多次触发,然后crontab的用户使用权限问题和at一样。

cron.deny 不允许使用crontab的用户 
cron.allow 允许使用crontab的用户
cron.allow优先度高于cron.deny
#注意唯一不同在于
cron.allow,cron.deny都不存在时候,都可以用crontab

而默认配置中cron.allow和cron.deny都是不存在的,因此意味着所有用户默认都能用crontab,首先看crontab的语法。

sijidou@ubuntu:~$ crontab --help
crontab: invalid option -- '-'
crontab: usage error: unrecognized option
usage: crontab [-u user] file
 crontab [ -u user ] [ -i ] { -e | -l | -r }
 (default operation is replace, per 1003.2)
 -e (edit user's crontab)
 -l (list user's crontab)
 -r (delete user's crontab)
 -i (prompt before deleting user's crontab)
sijidou@ubuntu:~$ 

这里各个参数说明一下

-e    进入编写
-l    列出任务
-r    删除任务
-i    删除前给提示
-u    指定某用户运行任务
-f    任务内容从文件里面导出

每条计划任务的格式书写如下

min   hour   day   month   week   [user]   command
0-59  0-23   1-31  1-12   0-7          echo "sijidou" > /home/sijidou/Desktop/1.tx

前面5个参数可以是这些形式

每个参数间用空格隔开
* 表示任意
1,2 表示1,2号都可以(这里假设是day的值)
1-20 表示1号到20号都可以(这里假设是day的值)
/10 表示每隔10天就执行一次(这里假设是day的值)

举几个例子

每月每周每日每小时51分的在桌面上生成有着"hello world"的1.txt文件

51 * * * * echo "hello world" > /home/sijidou/Desktop/1.tx

每过10天,在那天的每小时21分钟生成文件

21 * /10 * * echo "hello world" > /home/sijidou/Desktop/1.txt

每天的凌晨1点和2点的31分生成文件

31 1,2 * * * echo "hello world" > /home/sijidou/Desktop/1.txt

每周三到周五的每小时41分生成文件

31 * * * 3-5 echo "hello world" > /home/sijidou/Desktop/1.txt

接下来是如何把命令写进去,带参数e会进入设置的文本文件(第一次会让你选是nano还是vim,它会看你系统装了什么编译器)进行编写,之后是直接跳进去,它的原理是在/tmp/下生产一个随机后缀的文件,然后文件里面按每行算一条计划任务。

写好了后,查看任务,任务已经写进去了,但是这是sijidou用户,想要向root目录下写东西有点痴心妄想了,再用crontab -e 打开还可以看还可以看原来的命令,但是文件名有变化,删除文件直接使用crontab -r不需要带参数,它会把/tmp/目录下的临时文件直接删除,意味着你设置的所有计划任务都没了,而-u参数只有root才能设置,这里用sijidou账号带-u参数,回显不能使用

那么切换成root用户给sijidou设置任务

再切换回sijidou来,发现写进去了,如果要继续编译直接输入crontab -e

用root账号查看,删除sijidou账户的计划任务

也可以不用依赖crontab生成的零时文件,用自己编译的文件设置计划任务

相关推荐

为3D手游打造, Visual Studio Unity扩展下载

IT之家(www.ithome.com):为3D手游打造,VisualStudioUnity扩展下载7月30日消息,微软正式发布升级版VisualStudioToolsforUnity扩...

由ArcMap属性字段自增引出字段计算器使用Python的技巧

1.前言前些日子有人问我ArcMap中要让某个字段的值实现自增有什么方法?我首先想到像SQLServer中对于数值型字段可以设置自增。所以我打开ArcCatalog查看发现只提供默认值,没办法只能看...

微软首次回答 HoloLens 相关问题,终于爆料了

fengo2015/04/2115:11注:本文作者张静是NVIDIAGPU架构师,微信公众号“黑客与画家”(HackerAndPainter),知乎专栏地址。欢迎各位童鞋与他交流探讨。...

C#指针的应用(c#指针类型)

C#在有限的范围内支持指针。C#的指针只不过是一个持有另一类型内存地址的变量。但是在C#中,指针只能被声明为持有值类型和数组的内存地址。与引用类型不同,指针类型不被默认的垃圾收集机制所跟踪。出于同...

C# 堆栈(Stack)(c# 堆栈中定位调用messagebox 的地方)

C#集合在C#中,堆栈(Stack)是一种后进先出(LIFO,LastInFirstOut)的数据结构。堆栈(Stack)适用于存储和按顺序处理数据,其中最新添加的元素会最先被移除。堆...

欢迎回来:Fortran意外重回流行编程语言20强榜单

TIOBE指数是用来确定一种编程语言受欢迎程度的指标之一。它并不表明哪种编程语言是最好的,也不表明哪种编程语言写的代码行数最多,而是利用在谷歌、维基百科、必应、亚马逊、YouTube等各种引擎和网站上...

C#+NET MAUI实现跨平台/终端(linux,win,ios等)解决方案

简介.NETMulti-platformAppUI(.NETMAUI)是一个跨平台的框架,用于使用C#和XAML创建移动和桌面应用程序。使用.NETMAUI,您可以用一套代码库开发可以在A...

C#代码安全红线:SQL注入防护终极方案,让你的系统固若金汤

在数字化时代,应用系统的安全性至关重要。而SQL注入攻击,长期盘踞在OWASP(OpenWebApplicationSecurityProject)漏洞榜单的前列,成为众多基于数据库的应用系统...

C# (一)状态机模式(状态机代码实现)

最近空闲,炒炒隔夜饭,以前这些模式在自己项目种应用过不少,但一直没有像别人那样写一个系列,最近年纪大了,很多东西都忘记了,特别AI的兴起,更少写代码了,反正没什么事情,自己在重写一遍吧。创建型模式(5...

C# 中 Predicate 详解(c#中的replace)

Predicate泛型委托:表示定义一组条件并确定指定对象是否符合这些条件的方法。此委托由Array和List类的几种方法使用,用于在集合中搜索元素。Predicate<T>...

C#中$的用法?(c#中&&什么意思)

文章来自AI问答。在C#中,$符号用于字符串插值(StringInterpolation)。字符串插值是C#6.0引入的一种特性,它允许你在字符串中直接嵌入表达式,而不需要使用string.For...

C#并行编程:Parallel类(c# 并行处理)

在Parallel类中提供了三个静态方法作为结构化并行的基本形式:Parallel.Invoke方法:并行执行一组委托。Parallel.For方法:执行与C#for循环等价的并行方法。Parall...

颠覆认知!用Span重构foreach循环竟让数据处理快如闪电

在C#编程的世界里,数据处理效率始终是开发者们关注的焦点。随着项目规模的扩大和数据量的激增,哪怕是细微的性能提升,都可能对整个应用的响应速度和用户体验产生深远影响。近年来,C#引入的Span<T...

Unity3D手游开发实践《腾讯桌球》客户端开发经验总结

本次分享总结,起源于腾讯桌球项目,但是不仅仅限于项目本身。虽然基于Unity3D,很多东西同样适用于Cocos。本文从以下10大点进行阐述:1.架构设计2.原生插件/平台交互3.版本与补丁4.用脚本,...

.NET 7 AOT 的使用以及 .NET 与 Go 互相调用

目录背景C#部分环境要求创建一个控制台项目体验AOT编译C#调用库函数减少体积C#导出函数C#调用C#生成的AOTGolang部分安装GCCGolang导出函数.NETC#...