linux下计划任务学习记录
0x01 计划任务简介
linux 中计划任务主要分为”循环执行”和”只执行一次”两种,分别对应的时 crond
服务 和 atd
服务;
0x02 只执行一次的计划任务
0x02.1 atd 服务说明
atd
服务会轮训计划任务的文件,也就是我们用at
或者 batch
命令下达的任务,都会以文件的形式存储在系统中,其中:
在ubuntu系统下存在:
1
2
|
/var/spool/cron/atjobs
/var/spool/cron/atspool
|
在Centos系统下存在:
1
|
/var/spool/at/
|
PS: 若是没有安装请用对应系统地包管理器进行安装
0x02.2 atd 服务开启:
配置 atd
服务的权限:
- 首先寻找
/etc/at.allow
这个文件,只有写在这个文件里面的用户才能使用at
, 没有写在这个文件里面的用户不能使用(即使它也没被写在/etc/at.deny)中; - 如果
/etc/at.allow
不存在,就寻找/etc/at.deny
这个文件,写在这个at.deny
的用户不能使用at
; - 如果这两个文件都不存在则只能
root
用户使用at
;
确保 atd
服务开启:
1
2
|
/etc/ini.d/atd status
/etc/ini.d/atd start
|
设置 服务的开机自启动:
1
|
chkconfig atd on
|
0x02.2 at,atq,atrm,bath命令
1
2
3
4
5
6
7
|
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
|
参数说明:
>
- -V 显示版本信息
- -q<列队> 使用指定的列队
- -f<文件> 从指定文件读入任务而不是从标准输入读入
- -m 当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出
- -M 永远不发送任何邮件
- -l atq的别名
- -d atrm的别名
- -r atrm的别名
- -b batch.的别名
- -v 显示任务将被执行的时间
- -t<时间参数> 以时间参数的形式提交要运行的任务
示例1: 三天后的下午 5 点锺执行/bin/ls 命令
1
2
3
4
5
|
[root@localhost ~]# at 5pm+3 days
at> /bin/ls > /tmp/daodaoliang
at> <EOT>
job 1 at 2016-03-10 14:27:47
|
示例2: 明天下午5:20执行一个脚本
1
2
|
[root@localhost ~]# at -f /tmp/daodaoliang.sh 17:20 tomorrow
job 8 at 2016-03-10 14:31:25
|
示例3: 查询当前任务信息
1
2
3
4
5
|
atq
或者
at -l
|
然后
1
|
at -c <任务号码>
|
示例4: 删除某指定任务
1
2
3
4
5
|
atrm <任务号码>
或者
at -r <任务号码>
|
示例5: 从现在开始的系统闲暇时间执行一个脚本
1
2
3
4
5
|
batch now -f /tmp/daodaoliang.sh
或者
batch -f /tmp/daodaoliang.sh -b now
|
PS: 空闲指的是 在CPU 的工作负载小于 0.8 的时候;
0x03 循环执行的计划任务
0x03.1 crond服务说明
crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
crond 执行的计划任务主要分为如下两类:
- 系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存;
- 个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置。
0x03.2 crond服务开启
1
2
|
/etc/ini.d/crond startus
/etc/ini.d/crond start
|
设置 服务的开机自启动:
1
|
chkconfig crond on
|
0x03.3 crond服务配置
- 若
/etc/cron.allow
存在, 在这里面写入的用户则可以使用 crontab; - 若
/etc/cron.deny
存在,在这里面写入的用户则不可以使用 crontab; - 若这两个都不存在则看系统地配置参数了,要么只有超级管理员可以用,要么谁都可以用,一般来说,只要保留
etc/cron.deny
即可;
0x3.4 计划任务的说明
系统的计划任务写在如下路径文件里面:
>
/etc/crontab
文件(ubuntu系统可能不存在这个文件)/etc/cron.d/
文件夹下的文件/etc/cron.hourly/
文件夹下的文件/etc/cron.daily/
文件夹下的文件/etc/cron.weekly
文件夹下的文件/etc/cron.monthly
文件夹下的文件
用户自己的计划任务希望在如下的文件里面:
>
/var/spool/cron/<用户名字>
文件夹内的文件
总体来说按照用户和用途的不同需要按照以下来使用:
>
- 用户自己的计划任务直接用
crontab -e
来创建,这样能保证创建的指令行为不会被其他人看见; - 系统维护使用
/etc/crontab
如果这个计划任务是比较重要系统计划任务,为了管理方便,同时易于追踪则直接写入/etc/crontab
比较方便; - 自己开发的系统软件,最好是编写新的计划文件放到
/etc/cron.d/newfile
来进行管理比较方便 - 固定,小时、天、周等执行的工作,如果与系统维护有关则直接写在
/etc/crontab
集中管理比较好,当然也可以偷懒写在上述的几个特殊的文件夹里面;
0x3.5 crontab 格式说明
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SHELL=/bin/bash <==使用哪種 shell 介面
PATH=/sbin:/bin:/usr/sbin:/usr/bin <==執行檔搜尋路徑
MAILTO=root <==若有額外STDOUT,以 email將資料送給誰
# 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
|
0x3.6 anacron 的说明
anacron
只是一个程序并非一个服务,他会每小时被 crond
执行一次:
在
centos
下面对于它的配置在/etc/cron.hourly/0anacron
在
ubuntu
下面对于他的配置在/etc/cron.d/anacron
anacron 配置文件的说明
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
HOME=/root
LOGNAME=root
# These replace cron's entries
1 5 cron.daily run-parts --report /etc/cron.daily
7 10 cron.weekly run-parts --report /etc/cron.weekly
@monthly 15 cron.monthly run-parts --report /etc/cron.monthly
|
配置文件中的四列分别的意思为
>
- 第一列 天数 anacron 与 上次记录相差的天数,若是超过这个天数则就准备开始执行,若没有超过这个天数则不予执行;
- 第二列 延迟时间 (单位时分钟) 在上述超过天数后再进行执行计划任务,为了避免系统拥堵则延迟一定时间开始执行;
- 第三列 工作名称 这个计划工作的名字,这个可以自定义;
- 第四列 实际要运行的指令 比如
run-parts /etc/cron.daily
就是要运行在 指定目录下的所有脚本, 通常该脚本的路径 和crond
的文件路径相同;
所以如果你需要确保某些命令执行则需要进行修改 /etc/anacron
文件;
参考链接:
- http://linux.vbird.org/linux_basic/0430cron.php
- http://blog.sina.com.cn/s/blog_6561ca8c0101ab83.html
- http://www.jb51.net/LINUXjishu/74014.html
- http://blog.csdn.net/richerg85/article/details/23442411
- http://www.linuxfly.org/post/11/
http://daodaoliang.com/linux%E5%AD%A6%E4%B9%A0/2016/03/10/linux%E5%AD%A6%E4%B9%A0-2016-03-10-linux%E4%B8%8B%E8%AE%A1%E5%88%92%E4%BB%BB%E5%8A%A1%E5%AD%A6%E4%B9%A0%E8%AE%B0%E5%BD%95/
linux下计划任务学习记录的更多相关文章
- Unix和Linux下C语言学习指南
转自:http://www.linuxdiyf.com/viewarticle.php?id=174074 Unix和Linux下C语言学习指南 引言 尽管 C 语言问世已近 30 年,但它的魅力仍未 ...
- Linux 下shell 编程学习脚手架
linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...
- Linux 下Shell的学习
1.Shell学习 1.什么是Shell shell是一个命令解析器,在操作系统的最外层,负责和用户对话,将用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果.2.什么是shell脚本 ...
- linux 下C语言学习路线
UNIX/Linux下C语言的学习路线.一.工具篇“公欲善其事,必先利其器”.编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工 ...
- Linux下常用的命令记录
本文章记录我在linux系统下常用或有用的系统级命令,包括软硬件查看.修改命令,有CPU.内存.硬盘.网络.系统管理等命令.但本文不打算介绍生僻命令,也不介绍各个linux发行版下的特有命令,且以后会 ...
- Linux下计划任务:crontab 命令的权限说明
Linux下的计划任务: 使用crontab命令来执行调度,在 Linux 下可以通过创建文件 /etc/cron.allow 或者 /etc/cron.deny 来控制权限,如果 /etc/cron ...
- Linux下sysstat工具学习
Linux下,我们多用ssh链接服务器远程操控.对于系统的监控必不可少,sysstat很不错的监控工具包. sysstat官网:http://sebastien.godard.pagesperso-o ...
- linux下抓包学习--tcpdump的使用
一.为什么需要学这个 很多时候,开发环境上不会出现问题.但在测试或者现场时,总是会有很多莫名其妙的问题. 这时候,能在出问题的环境上,开启抓包,然后再去重现问题的话,这时候,就可以拿到第一手的资料了. ...
- 1.Linux下Git入门学习
1.在Linux下安装git软件,使用以下命令: yum install git 2.设置用户名和邮箱(必须): git config --global user.name "Your Na ...
随机推荐
- Java中的equals比较,小坑一个
最近工作中,经常需要比较2个对象的值.有个问题经常遇到,就是下面的2种情况. public static void main(String[] args) { Integer a =11; Objec ...
- Opencv Surf算子中keyPoints,描述子Mat矩阵,配对向量DMatch里都包含了哪些好玩的东东?
Surf算法是一把牛刀,我们可以很轻易的从网上或各种Opencv教程里找到Surf的用例,把例程中的代码或贴或敲过来,满心期待的按下F5,当屏幕终于被满屏花花绿绿的小圆点或者N多道连接线条霸占时,内心 ...
- 29个月过去了,CSDN排名前200了:排名不断靠前的过程中,自己的技术水平和竞争力一定会不断向上
刚刚在csdn博客又发表了一篇,工作问题总结,突然发现,我的博客排名终于进入前200了. 这又是一个伟大的里程碑啊. 在过去29个月的时间里,排名从"千里之外" 到"19 ...
- 【hdu 3032】Nim or not Nim?
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...
- Qt Roadmap for 2018(对3D有很多改进)
When it comes to new features, we have many things ongoing related to graphics, so I’ll start with t ...
- sparksql parquet 分区推断Partition Discovery
网上找的大部分资料都很旧,最后翻了下文档只找到了说明 大概意思是1.6之后如果想要使用分区推断就要设置数据源的basePath,因此代码如下 java public class ParitionInf ...
- 【BZOJ 1012】 [JSOI2008]最大数maxnumber(线段树做法)
[题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1012 [题意] [题解] 预开一个20W长度的线段树; 这里a[1..20W]={0} ...
- cordova 生成发行版apk,并添加证书 – 畅玩Coding
原文:cordova 生成发行版apk,并添加证书 – 畅玩Coding 首先jdk生成证书. 1.进入jdk安装目录 D:\Java\jdk1.7.0\bin 2.执行命令 keytool -gen ...
- MyCat负载均衡 下篇
MyCat负载均衡 下篇 之前在 一步一步在Windows中使用MyCat负载均衡 上篇 中已经讲了如何配置出MyCat.下面讲其相关的使用. 五.配置MyCat-eye 对于MyCat监控官网还 ...
- mod_timer函数及其他定时器函数
当一个定时器已经被插入到内核动态定时器链表中后,我们还能够改动该定时器的expires值.函数mod_timer()实现这一点 改动注冊入计时器列表的handler的起动时间 int mod_time ...