原文链接: http://www.tsingfeng.com/?tag=cronjob

本文说的计划任务是指linux的Cronjob。
语法
下面是个简单的计划任务:

10 * * * * /usr/bin/php /www/virtual/username/cron.php > /dev/null 2>&1

它主要有两部分组成:
1.”10 * * * *” ,这是定时器。
2.其他部分是命令,它们会在命令行运行。

这个例子中,命令本身又有三个部分:
1.”/usr/bin/php”。PHP脚本通常不会自己执行,它需要通过PHP解析器来执行。
2.”/www/virtual/username/cron.php”。这个是需要执行的脚本的路径。
3.”> /dev/null 2>&1″。这部分是处理脚本的输出的。稍后我们详细说它。

定时器语法
就是上面计划任务的第一部分。它决定了何时执行计划任务。
它包含5部分:
1.分钟(0-59)
2.小时(0-23)
3.一个月的哪一天(1-31)
4.一年中的哪个月(1-12)
5.星期几(0是星期天)

星号
如果某个部分出现的是星号而不是数字,就是说明这个部分表示的时间全部会执行。
不太容易说清楚,看例子吧。

示例:
下面的计划任务会一直运行

* * * * * [command]

下面的计划任务会在每个小时的0分时运行(就是每小时执行一次)

0 * * * * [command]

下面依旧是一个每小时运行一次的计划任务。不过是在每个小时的一刻钟时运行的(1:15,2:15.。。)

15 * * * * [command]

下面的计划任务每天执行一次,在2:30分

30 2 * * * [command]

下面的计划任务是在每个月2号的午夜执行(比如:2010年2月2日00:00)

0 0 2 * * [command]

下面的计划任务会在每周一的每个小时0分钟时执行一次

0 * * * 1 [command]

下面的会每小时运行3次,在0分,10分,和20分时

0,10,20 * * * * [command]

下面是用除号“/”表示每多少运行一次。本例是每5分钟运行一次

*/5 * * * * [command]

还可以用“-”表示一个范围,如下表示5到10点的每个整点运行一次

0 5-10 * * * [command]

另外还有一个特殊的时间关键字“@reboot”,就是每次重启服务器时运行计划任务

@reboot [command]

设定和管理计划任务
编辑Crontab,来设定计划任务。使用下面的命令,会在vi里打开crontab的内容以供编辑:

crontab -e

如果你只想看看,不需要编辑,可以使用以下的命令

crontab -l

要删除crontab的内容,就是删除所有的计划任务,可以这样:

crontab -r

系统会询问“remove crontab for 用户名?”你敲下y,就删除了用户的crontab了

通过载入文件来设立计划任务

crontab cron.txt

这个要谨慎,因为这将会覆盖掉原本的计划任务的内容。

注释
注释使用#字符。例如:

# This cron job does something very important  
10 * * * * /usr/bin/php /www/virtual/username/cron.php > /dev/null 2>&1

设定E-mail
默认情况下,计划任务的输出会发送到email,除非你取消他,或是定向到一个文件。这样设定MAILTO:

MAILTO="username@example.com"  
# This cron job does something very important  
10 * * * * /usr/bin/php /www/virtual/username/cron.php > /dev/null 2>&1

使用PHP解析器
CGI脚本默认是可以执行的,但是php脚本不行。他们需要用php解析器来运行。这就是我们要把php解析器的路径放到php脚本前的原因。

* * * * * /usr/bin/php [path to php script]

有时候php解析器可能在这里”/usr/local/bin/php”。我们可以用下面的命令找到正确的路径:
输入:which php
系统反馈:/usr/local/bin/php

ok,我们就知道php解析器的路径了。

处理输出
如果你不处理输出,它们会发送mail到你的服务器账号里。

如果你在命令行尾添加”> /dev/null 2>&1″,输出将会丢弃。(其他命令后面接它也会丢弃输出)。

$ /usr/local/bin/php hello.php
Hello world
$ /usr/local/bin/php hello.php > /dev/null 2>&1
$

大于号(>)用于重定向输出。”/dev/null”是个空设备,输出到那里就会忽略掉。
“2>&1″是标准错误输出,定向到标准输出。也是到”/dev/null”.

输出到文件
输出到文件也是用的大于号“>”.

10 * * * * /usr/bin/php /www/virtual/username/cron.php > /var/log/cron.log

这将会每次都覆盖原来的输出。如果你想要的是追加到以前的输出后面,可以用两个大于号”>>”来处理。

10 * * * * /usr/bin/php /www/virtual/username/cron.php >> /var/log/cron.log

可执行脚本
你可以把php脚本当成CGI一样的来运行。只需要在开头的地方加上一行php解析器的路径(hello.php):

#!/usr/local/bin/php  
<?php  
 
echo "hello world/n";  
 
// ...  
 
?>

再设置一下权限,使之可执行,比如chmod到755.
比如上面的hello.php,再 “chmod 755 hello.php”
直接运行:

$ ./hello.php
Hello world
$

这时,你的计划任务就可以这样写了

10 * * * * /www/virtual/username/hello.php

防止定时任务撞车
比如,你有一个每分钟都运行的计划任务,但是这个任务这分钟没有运行完成,下一分钟的计划任务也已经开始了。。这样也许会崩溃我们的服务器的。
我们可以通过文件锁来解决:

$fp = fopen('/tmp/lock.txt', 'r+');  
if(!flock($fp, LOCK_EX | LOCK_NB)) {  
    echo 'Unable to obtain lock';  
    exit(-1);  
}  
/* ... */  
fclose($fp);

过程:打开文件,判断文件是否锁定,锁定了就退出。这样第一个计划任务没运行结束时,文件不会关闭,也就没有解锁。
下一个时间触发的计划任务,也尝试打开文件,发现已被锁定,于是退出。这样就不会撞车了。

组织web访问计划任务
如果你用php写了计划任务,那你要保证其他人不可以从web访问到它。简单的方法是把这些脚本放到web目录外。
如果无法放到web目录外,可以在计划任务要执行的脚本的目录下,用.htaccess 文件控制:

deny from all

你也可以在php脚本里限制:

if (isset($_SERVER['REMOTE_ADDR'])) die('Permission denied.');

这将保证,如果是从网络来的,会立即停止php脚本的执行。

Linux 的计划任务相关推荐

  1. Linux任务计划、周期性任务执行

    Linux任务计划.周期性任务执行 未来的某时间点执行一次任务:at, batch 周期性运行某任务: cron 电子邮件服务: smtp: simple mail transmission prot ...

  2. Linux系统任务计划(at、crontab)的使用方法

    Linux系统任务计划(at.crontab)的使用方法 Linux上的任务计划: 任务计划: 在未来时间点一次性执行某任务:at, batch 周期性执行某任务:crontab 电子邮件服务: sm ...

  3. Linux—任务计划

    1.周期性任务计划: 管理系统的过程中,我们并不是每次都直接执行脚本或者命令,有时候需要让脚本.命令以及系统等在指定的时间按照我们的意愿执行我们设定好的脚本或者命令,这时候就需要使用到Linux任务计 ...

  4. 查看linux的计划任务日志,查看计划任务日志(共5篇).docx

    查看计划任务日志(共5篇) 沈阳工程学院 学生实验报告 实验室名称:信息学院网络安全实验室 实验课程名称:网络安全技术 实验项目名称:实验六日志查看与清除实验 班级:姓名:学号: 实验日期:XX年4月 ...

  5. linux任务计划详解

    linux任务计划.周期性任务执行 未来的某个时间点执行一次某任务:at,batch 周期性运行某任务:crontab执行结果:会通过邮件发给用户 mail 简单使用 查看本地电子邮件服务是否开启 ~ ...

  6. linux 任务计划 cron

    #修改当前用户的计划 crontab -e   //01 * * * * 不能留有空格 01 * * * * /home/zlb/mysql_dump/backup -run >> /ho ...

  7. linux任务计划cron

    linux任务计划cron 1.crontab命令任务计划配置文件 [root@bogon ~]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/ ...

  8. linux 周期性任务,Linux任务计划,周期性任务执行详解

    Linux任务计划,周期性任务执行 概述 本章将为大家介绍一些任务计划和周期性任务计划执行相关内容 任务计划的分类主要有由两种 未来的某时间点执行一次某任务:at,batch 周期性运行某任务:cro ...

  9. linux任务计划不执行时间,Linux任务计划、周期性任务执行

    Linux任务计划.周期性任务执行 内容简要命令:mail, at, crontab 相信每个人都有使用闹钟的习惯,我们设定闹钟的种类有很多.比如说,只提醒一次.工作日提醒.休息日提醒等.在设定闹钟之 ...

  10. Linux查看分析任务计划命令,Linux任务计划crontab

    今天学习的Linux任务计划crontab 我们时常会有一些定期定时的任务,如周期性的清理一下/tmp,周期性的去备份一次数据库,周期性的分析日志等等.而且有时候因为某些因素的限制,执行该任务的时间会 ...

最新文章

  1. Redis 笔记(13)— scan 和 keys 寻找特定前缀key 字段(命令格式、使用示例、定位大key)
  2. node.js request get 请求怎么拿到返回的数据_使用JS和NodeJS爬取Web内容
  3. I00040 计算1000以内的勾股数
  4. c语言中有bool型变量吗?
  5. leetcode 861. 翻转矩阵后的得分
  6. Java黑皮书课后题第6章:6.11(金融应用:计算酬金)编写方法,利用编程练习题5.39中的方法计算酬金。方法头如下所示。编写程序,显示下面表格
  7. leetcode 521. 最长特殊序列 Ⅰ(Java)
  8. 使用postman和SAP C4C OData服务创建销售订单
  9. HaaS UI小程序
  10. java使用迭代器删除元素_使用Java从地图中删除元素
  11. 1805. 字符串中不同整数的数目
  12. 比较全的log4j示例
  13. 初识webpack——webpack四个基础概念
  14. vue 点击div 获取位置_vue接入腾讯位置服务之点击事件
  15. Java输出表格格式_在Java的System.out中以表格式输出
  16. python中cnt是什么意思_CNT是什么意思
  17. P2000 拯救世界(生成函数裸题+NTT高精)
  18. 大学必备C语言基础知识(一)
  19. 深扒金山云招股书:拆分出来的子公司,能否走出金山系“舒适圈”?
  20. android 获取cpu温度

热门文章

  1. pyinstaller 打包exe 防反编译(加密)
  2. 线性表之线性表与数组的区别
  3. Git学习二、GitLab官网,安装自己的一个私有Gitlab代码管理库
  4. 补充Live555推实时流
  5. 单云台语音跟踪摄像机MHD-G200TH
  6. 继承QGraphicsObject自定义图元
  7. electron的单元测试(基于mocha+chai+karma)
  8. OracleTechnologyNetwork
  9. 浅谈provide与inject
  10. SeetaFace2-master在Windows10 VS2019编译的两种方法