Linux系统任务计划
/etc/crontab cron的主配置文件,可以定义PATH
cron格式如下:
# .----------------分钟 (0 - 59)
# | .------------- 小时 (0 - 23)
# | | .---------- 日 (1 - 31)
# | | | .------- 月 (1 - 12)
# | | | | .---- 周 (0 - 6) (周日=0 or 7)
# | | | | |
# * * * * * user-name command to be executed
cron 也是一个服务,所以需要先启动服务才能生效:
service crond start; service crond status

任务计划练习题:
每天凌晨1点20分清除/var/log/slow.log这个文件
crontab –e 都是在这个文件里面编辑============
20 1 * * * echo “” > /var/log/show.log

每周日3点执行 “/bin/sh /usr/local/sbin/backup.sh”
0 3 * * 0 /bin/sh /usr/local/sbin/backup.sh

每月14号4点10分执行 “/bin/sh /usr/local/sbin/backup_month.sh”
10 4 14 * * /bin/sh /usr/local/sbin/backup_month.sh

每隔8小时执行 “ntpdate time.windows.com”
0 */8 * * * ntpdate time.windows.com
或者
0 0,8,16 * * * ==0,8,16 这三个是一个段

每天的1点,12点,18点执行 “/bin/sh /usr/local/sbin/test.sh”
0 1,12,18 * * * /bin/sh /usr/local/sbin/test.sh

每天的9点到18点执行 “/bin/sh /usr/local/sbin/test2.sh”
0 9-18 * * * /bin/sh /usr/local/sbin/test2.sh

守护进程

pstree

service crond stop
service crond start restart是重启 reload重新载入

ntsysv 服务的控制界面

chkconfig 配置守护进程在哪种模式下启动

chkconfig --list 查看所有相关的守护进程
chkconfig --list crond 查看单个
chkconfig --level 2345 crond off 改变进程的状态

crontab -l 查看用户的cron任务

周期性计划任务 (实现自动化)

service crond status 查看一个守护进程是否运行

crontab -e
*/1 * * * * echo "Weclome to houdunwang." >> /hd.txt 一分钟一次 打印到hd.txt里
crontab -l 查看任务计划
cat hd.txt 看看里面打印了多少个了

crontab -r 是清空计划任务
service crond restart 重启一下就不生效了 hd.txt不打印了

vim /etc/cron.deny 在里面写哪个用户哪个用户就不能使用crontab

普通用户的crontab的使用
crontab -e
*/1 * * * * echo "Weclome to houdunwang." >> /home/zhangsan/hd.txt

crontab -l
sudo /sbin/service crond restart 普通用户要这样重启
sudo /sbin/service crond status

让linux自动同步时间(shunz)

vi /etc/crontab
加上一句:
00 0 1 * * root rdate -s time.nist.gov

通过指定时间,只要匹配当前时间,就会执行命令。例如,通过指定以下时间:0 * * * * do-something,命令将在当前时间的分钟值为 0 时(例如整点时)执行。

而指定以下时间:0 23 * * * do-something,命令将在每晚 11 点时运行。

如果指定多个值,则会对每个值进行匹配。例如,要每 15 分钟执行一次命令,请使用以下语句:
0,15,30,45 * * * * do-something

或者,可以通过使用以下命令指定命令从星期一到星期五每六个小时运行一次:
0 0,6,12,18 * * 1,2,3,4,5 do-something

可以在 crontab 中包含任意多的行,如果希望,可以多次引用相同的命令,而这在其他情况下则相当难于实现。例如,一个命令要在星期一到星期四的下午 6 点运行,但在星期五时要在午餐时间运行,则可以使用以下两行语句:
0 18 * * 1,2,3,4 do-something
0 12 * * 5 do-something
===============================
对于前两个选项(分和时)应该小心处理;如果未指定这两个选项(使用星号),将导致在匹配其他指定值的情况下,每分钟运行一次。例如,一个常见的错误是,希望在月初运行命令,但却使用了以下语句:
* * 1 * * do-something

这里的问题是,上述指定语句实际上会在每个月的第一天每分钟运行该命令一次。如果希望命令只运行一次,必须指定应执行命令的分和时的值:
0 12 1 * * do-something
=================================
省略分钟值,将至少让命令在匹配指定的时(和日期)的情况下每分钟运行命令一次。

虽然有这么大的灵活性,但仍然会出现很难(甚至不可能)使用 crontab 系统执行命令的情况。

处理手动计划

cron 的问题在于,尽管 crontab 中可用的所有不同选项提供了各种不同的可能性,但仍然有一些恼人的局限。

每月的最后一天

例如,要在 cron 中每月最后一天运行命令很困难,因为没有办法直接指定此信息。相反,您必须单独指定月份和其对应的最后一天。例如,在不是闰年的年份,可以结合使用以下三行语句:
59 23 31 1,3,5,7,8,10,12 * do-something
59 23 30 4,6,9,11 * do-something
59 23 28 2 * do-something

==============================
在上面的示例中,通过手动的方式选择了每个月的最后一天,但管理这三行可能有些麻烦,必须在闰年手动修改 crontab 定义,以确保该信息能计算出正确的日期。

相应的解决办法是使用 echo 命令(而不是 cron)执行日期检查。要实现这一点,需要使用 cal(用于输出当前月份的日历)和 awk(用于确定该月的最后一天)。如果运行以下命令,应该可获得月份的最后一天:
$ echo `cal`|awk '{print $NF}'

以上命令首先通过 echo 命令(会将通常的多行输出作为一行输出)输出日历,然后对输出的数字进行计数;最后的数字就是当前月份的最后一天。

要在 crontab 中使用此命令,应采用以下方式:
59 23 * * * [`echo \`cal\`|awk '{print $NF}'` -eq `date +\%d`] && do-something

方括号将在用于运行命令的外壳程序中启动一个测试。另外要注意,cron 将筛选出 % 符号,因此在 crontab 中使用时必须进行转义。该测试的第一部分就是前面演示的内容,其第二部分使用 date 命令来输出当前日期。重复的 && 可确保 && 右侧的命令仅在左侧的测试结果为真时执行。

给定周中的特定天

另一个常见的需求是,仅在每月中的特定星期数运行。例如,可能希望在每个月的第一个星期一或星期五运行一个报告。为了完成此任务,可以使用与上面类似的过程。对于给定周中的任何天,它一定属于以下日期范围之一:

* 第 1 周:第 1 天到第 7 天
* 第 2 周:第 8 天到第 14 天
* 第 3 周:第 15 天到第 21 天
* 第 4 周:第 22 天到 28 天

要确定当前日期是否在给定范围内,例如是否在第四周范围内,可以使用与以下所示类似的测试:
[ `date +\%e` -gt 21 -a `date +\%e` -lt 29 ]

%e 用于返回当天的号数,如果数字小于 10 则用一个空格(而不是零)作为其前缀,以确保对数字(而非字符串)进行比较。

现在可以将此与 crontab 定义一起使用,以尝试每周星期五运行命令:
59 23 * * 5 [ `date +\%e` -gt 21 -a `date +\%e` -lt 29 ]
&& do-something

命令将在每周星期五运行,但由于测试将仅在每个月的第四周返回 True,命令将实际在第三个星期五执行。

Cron 作业执行环境

尽管可以更改执行 cron 作业时使用的环境,但经常最好创建一个包装脚本,以在运行实际需要的命令前定义任何环境变量(如 PATH)。

这样做的部分原因是出于安全考虑;向 cron 作业开放的区域越多,越可能得到包含可疑内容的东西。另一个原因是,这样可确保即使更改了环境中的一个依赖关系,您的 cron 作业仍然将执行。

通过使用独立的包装脚本,还可以利用不同外壳程序的扩展和功能,而不仅限于通常用于运行大部分 cron 作业的标准 Bourne 外壳程序。

最后,通过使用独立的包装脚本,还允许您为不同命令定义不同的环境。如果您希望在可能使用相同应用程序或工具的不同版本的不同用户环境中运行命令,这将非常有用。

记录输出的技巧

缺省情况下,crontab 运行的生成输出(到标准输出和标准错误的输出)的命令都会将输出以电子邮件的形式发送给该作业的用户。不过,这并非总是方便的解决方案,对于某些结果,您可能只需要部分输出,或者可能希望忽略标准输出,而仅报告错误。甚至可能希望将输出发送到不同的用户或电子邮件别名。

可以在 crontab 指定语句中使用重定向来将输出信息发送到特定文件或忽略来自不同源的输出。要直接将输出记录到文件中,可以使用以下语句:
1 1 * * * do-something >/var/logs/do-something.log

上述语句会覆盖信息,因此,如果希望保持较长时间的记录,请使用追加:
1 1 * * * do-something >>/var/logs/do-something.log

要忽略输出,请重定向到特殊的 /dev/null 设备。对于标准输出,请尝试使用以下语句:
1 1 * * * do-something >/dev/null

对于标准输出和错误,请尝试使用以下语句:
1 1 * * * do-something >/dev/null 2>&1

如果希望收集按照日期组织的日志,则请将 date 命令和指定日志文件的语句结合使用,例如:
1 1 * * * do-something >/var/logs/something.`date +\%Y\%m\%d`.log

要从 cronjob 中的一系列命令拾取和选择输出,或创建基于内容的自定义电子邮件,请使用包装脚本,以将您希望保存的信息写入到临时文件中,并同时忽略其他输出。可以随后将该文件的内容以电子邮件的方式发送给任何希望的用户。

要创建临时文件,请使用时间和进程 ID 生成唯一的文件名,如下所示:
LOGFILE=/tmp/`datetime +%Y%m%d`.$$.tempfile
do-something >$LOGFILE 2>&1
mailx -s "Results of do-something report" reportees <$LOGFILE
rm -f $LOGFILE

将文件发送到相关人员后,请记住删除该文件。在上面的示例中,使用了 mailx(而不是 mail)来允许设置主题。

结束语

通过将 crontab 和 at 命令结合使用,可以指定任何所需的命令的执行时间或间隔。使用 at 时,可以在给定时间仅运行一次命令或脚本。通过使用 crontab,可以指定执行的时间间隔,这个间隔可以随意指定,可以间隔很长,也可以间隔很短。但应仔细处理,以确保命令在所需的准确时间运行。忽略分和时可能带来问题,或者可能导致您的命令在预期外的时间或时间间隔运行。

在 crontab 不够具体或灵活的时候,可以使用其他一些替代方法,以处理更为复杂的情况,例如在每月的最后一天或特定周的特定天运行命令。

进行计划可节省时间,在细心组织下,还能帮助减少您的工作负担,减少重复工作。

crond守护进程的更多相关文章

  1. crond守护进程实现定时监控某进程占有内存的大小

    1)添加计划任务 crontab -e会使用某个编辑器打开某个文件,然后在内输入需要执行的计划任务,保存后在/var/spool/cron/crontabs/下会出现以用户名命名的文件 2)计划任务如 ...

  2. 《Unix环境高级编程》读书笔记 第13章-守护进程

    1. 引言 守护进程是生存期长的一种进程.它们常常在系统引导装入时启动,仅在系统关闭时才终止.它们没有控制终端,在后台运行. 本章说明守护进程结构.如何编写守护进程程序.守护进程如何报告出错情况. 2 ...

  3. linux系统编程之进程(八):守护进程详解及创建,daemon()使用

    一,守护进程概述 Linux Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.它不需要用户输入就能运行而且提供某种服务,不是对整个 ...

  4. 创建守护进程步骤与setsid() -- linux deamon进程

    原创:http://www.cnblogs.com/mickole/p/3188321.html 一,守护进程概述 Linux Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终端并且 ...

  5. Python与Hack之守护进程

    1.什么是守护进程: 在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件.由于在linux中,每个 ...

  6. Linux守护进程的编程实现(转)

    http://blog.csdn.net/zg_hover/article/details/2553321 http://blog.csdn.net/kongdefei5000/article/det ...

  7. Linux 守护进程和超级守护进程(xinetd)

    一 .Linux守护进程 Linux 服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台的守护进程来执行的 ...

  8. Linux中的两种守护进程stand alone和xinetd

    Linux中的两种守护进程stand alone和xinetd --http://www.cnblogs.com/itech/archive/2010/12/27/1914846.html#top 一 ...

  9. Linux之守护进程

    一.守护进程概述 在linux或者unix操作系统中在系统的引导的时候会开启很多服务,这些服务就叫做守护进 程.为了增加灵活性,root可以选择系统开启的模式,这些模式叫做运行级别,每一种运行级别以一 ...

随机推荐

  1. 基于px2rpx-loader,探讨一下loader的封装思想

    本文以px2rpx-loader的源码为学习对象,了解其工作机制以及loader封装的思想. 1.前言 最近在了解mpvue框架的时候,对于其能够实现一套代码兼容web和微信小程序(以下简称小程序)的 ...

  2. Eclipse编写JavaFX环境配置

    配置eclipse用于写JavaFX:1.确定JRE中有jfxrt.jar---jdk82.选中项目-->属性-->Java Build Path3.Libraries-->jre包 ...

  3. ES6编程规范

    andre es6 js

  4. JS - 兼容的事件助手

    (function () { // 兼容的事件助手 window.CompatibleEventHelper = { addEventListener: function (elem, type, c ...

  5. 【Python 2 到 3 系列】 关于除法的余数

    v2.2 以前,除("/")运算符的返回有两种可能情况,分别是整型和浮点型.操作数的不同,是影响计算结果数据类型的关键. 以 a / b 为例,a.b均为整型,则结果返回整型:a. ...

  6. Pandas 索引和切片

    Series和Datafram索引的原理一样,我们以Dataframe的索引为主来学习 列索引:df['列名'] (Series不存在列索引) 行索引:df.loc[].df.iloc[] 选择列 / ...

  7. 查找并绘制轮廓 opencv

    findContours(): 第二个参数为一个检测到的轮廓,函数调用后的运算结果都放在这里,每个轮廓存储为1个点向量,用point类型的vector表示. 第三个参数表示轮廓数量,包含了许多元素.每 ...

  8. [CodeForces - 296D]Greg and Graph(floyd)

    Description 题意:给定一个有向图,一共有N个点,给邻接矩阵.依次去掉N个节点,每一次去掉一个节点的同时,将其直接与当前节点相连的边和当前节点连出的边都需要去除,输出N个数,表示去掉当前节点 ...

  9. L2-029 特立独行的幸福 (25 分)

    L2-029 特立独行的幸福 (25 分)   对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 19 经过 ...

  10. 翻译 | “扩展asm”——用C表示操作数的汇编程序指令

    本文翻译自GNU关于GCC7.2.0版本的官方说明文档,第6.45.2小节.供查阅讨论,如有不当处敬请指正…… 通过扩展asm,可以让你在汇编程序中使用C中的变量,并从汇编代码跳转到C语言标号.在汇编 ...