在linux中有时候想执行定时任务、进行服务器的维护或者清理日志,然后很多时候程序员并不懂得shell脚本,然而我们可以用自己用的语言进行代替,我是PHP程序员、所以就用php
像shell脚本 打开后语法是 #!/bin/bash
或者#!/bin/sh
这样子,这语法的大概意思就是引入bin目录下的命令来执行 ,同理我们用php来执行这个文件 ,创建个mkdirphp文件
#! /bin/php
<?php
mkdir(123);
注意:要把这个mkdirphp文件修改具有执行权限chmod -x
。然后我用在当前目录直接执行 ./execphp
直接新建个目录123。然而我们在实际运用中会存在一些误区。就是路径问题、假如我在计划任务上这么写
*/1 * * * * /root/bak_db/mkdirphp
然后执行过后,在/root/bak_db/
目录下并没有 123这个目录,其实是在上一层root目录下,有时候在我们粗心的时候,会认为失败。我们查看日志tail -f /var/log/cron
在第一分钟执行的日志、并没有什么问题,第二次执行 日志里会有 (root) MAIL (mailed 216 bytes of output but got status 0x004b#012)
这一条、执行失败了(原因是因为我已经在/root创建成功了123、再次创建失败)。
其实PHP脚本里的正确写法应该是在php脚本里面、引入路径文件或创建文件的时候要给绝对路径。
要不就是命令执行期、是在你要执行的文件内。那么crotab的命令引改这么写
*/1 * * * * cd /root/bak_db && /root/bak_db/mkdirphp
下面是我的计划任务脚本的内容
30 1 * * * sh -x /opt/sh/bak_db.sh
40 1 * * * cd /root/bak_db && /usr/local/php/bin/php /root/bak_db/bakphp
//上面的是每天1点40左右 进入目录、用bin/php命令 执行删除多余备份的sql文件的bakphp脚本