crontab学习笔记

4 篇文章 0 订阅

最近在做PHP对于IOS的push信息,但是问题是要启动发送命令,必须在浏览器中访问规定的php特定页面才能实现推送功能。这是不科学的,然后研究如何让服务器自动来启动推送服务。然后我准备用linux的crontab命令来实现。

一、crontab命令简介。

crontab是linux系统自带命令,用于设置周期性被执行的指令,该命令从标准输入设备读取指令(比如我用的txt文件),然后存放在crontab文件中,实现的功能就是,每隔多少秒来访问php页面。命令简介不赘述,网上一大堆。

二、crontab使用说明。

crontab应该是每个用户拥有一个,同时操作系统保存一个针对整个系统的crontab,其实我理解是root用户的。

语法:crontab [-e [UserName]|-l [UserName]|-r [UserName]|-v [UserName]|File ]  没研究这是什么,抄过来 o(╯□╰)o。

其实常用命令是:crontab -l列出目前的时程表,其实就是几个命令在运行。-r 删除,是直接全部删除了。-e文字编辑器来设定时程表,默认vi。-v用户cron作业的状态。还有最重要的是启动 :  crontab 文件名 运行的规则跟启动时间什么的都要写在这个文件里面。

编辑时候直接写入  crontab -e 。然后  /etc/init.d/crond restart 重启下

/etc/init.d/crond restart tail -f /var/log/cron 用来查看日志

三、crontab的格式。

这个是比较重要的,文件我直接一个txt文件,里面的要编写你的逻辑。

* * * * * (cd /home/foobar/pushNotification;php send_notification.php > /dev/null 2>&1 >> /tmp/pn_send & sleep 30; ./send_notification.php > /dev/null 2>&1 >> /tmp/pn_send) # Send Push Notification
* * * * * (cd /home/foobar/pushNotification;php all_send_notification.php > /dev/null 2>&1 >> /tmp/pn_all_send) # All Send Push Notification
* * * * * (cd /home/foobar/pushNotification;php feedback.php > /dev/null 2>&1 >> /tmp/pn_feedback) # Feedback Token
 把我的粘贴上来,举例讲一下。

1、前面的五个*不是没意义的,而是意义重大。分别是:分钟,小时,日,月,星期(0 -- 6,0星期天)也就你这个程序要执行的时间。

2、第六行,要运行的命令。

30 21 * * * /usr/local/apache/bin/apachectl restart //这个意思每晚的21:30重启apache

0,30 18-23 * * * /usr/local/apache/bin/apachectl restart//例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。

3、我的命令的意思是,首先进入我的php项目目录。然后以命令方式打开

all_send_notification.php
然后将执行的结果写入 /tmp/pn_all_send这个文件里面   
> /dev/null 2>&1 >>	// > 代表重定向到哪里, /dev/null 代表空设备文件, 2> 表示stderr 标准错误, & 表示同于的意思, 2>&1 表示2的输出重定向等同于1. 1 表示stdout标准输出,系统默认值是1。因此,>/dev/null 2>&1也可以写成“1> /dev/null 2> &1”

 
 
那么本文标题的语句执行过程为:
1>/dev/null :首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2>&1 :接着,标准错误输出重定向 到 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
说清楚了吗,大家理解下吧!
顺便对比述说下这么用的好处!
   最常用的方式有:
command > file 2>file  与command > file 2>&1
它们 有什么不同的地方吗?

      首先command > file 2>file 的意思是将命令所产生的标准输出信息,和错误的输出信息送到file 中.command  > file 2>file 这样的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file 的管道。
      而command >file 2>&1 这条命令就将stdout直接送向file, stderr 继承了FD1管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容。
      从IO效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,较多的时候我们会command > file 2>&1 这样的写法。
关于crontab就写到这里,我不是专业做运维,对于shell脚本也只是略懂。继续苦逼当程序。
 

总结

  • 查看当前用户的cron配置,使用 crontab -l
  • 编辑当前用户的cron配置,使用 crontab -e
  • 删除当前用户的cron配置,使用 crontab -r
  • 以root身份查看/编辑/删除某用户的cron配置,在命令后加上 -u USERNAME
  • 配置系统级的任务,编辑 /etc/crontab 文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值