范家烨 發表於 2023-6-12 00:00:00

Ubuntu系统下用Crontab命令定时执行PHP文件详解

<p>
        <span><strong>前言</strong></span></p>
<p>
        一般我在开发中,常用的定时任务有2种。一种是直接调用php文件执行,还有一种是调用远程url地址。</p>
<p>
        首先,先来亮相一下我们今天的主角,crontab命令。这个是系统定时命令,作用是定时的去执行一些任务。包含一些系统级别的任务,当然用户也可以直接借用该命令来实现自己的一些计划任务。</p>
<p>
        该命令一般跟随系统启动,我们可以使用一下命令来查看是否cron是否启动</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_89456">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">pgrep </code><code class="bash functions">cron</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
</div>
<p>
        如果启动了,会返回一个进程id</p>
<p>
        <img style="max-width:100%!important;height:auto!important;"title="Ubuntu系统下用Crontab命令定时执行PHP文件详解" alt="Ubuntu系统下用Crontab命令定时执行PHP文件详解" src="https://zhuji.jb51.net/uploads/img/202305/6bf5ef729eab4270739147d72ff38c4d.jpg"></p>
<p>
        crontab文件一般存放于/etc目录下。我们使用,<code>crontab -e</code>来编辑cron任务。(第一次用这个命令,会让你选择文本编辑器)</p>
<p>
        <img style="max-width:100%!important;height:auto!important;"title="Ubuntu系统下用Crontab命令定时执行PHP文件详解" alt="Ubuntu系统下用Crontab命令定时执行PHP文件详解" src="https://zhuji.jb51.net/uploads/img/202305/87d5fc452c878f6e8d8cdd37228f393f.jpg"></p>
<p>
        打开cron文件,注意观察最后一行 m h dom...这里简要介绍一下它的意思。</p>
<ul>
<li>
                m:分钟,0-59</li>
        <li>
                h:小时,0-23</li>
        <li>
                dom:日期,1-31</li>
        <li>
                mon:月份,1-12</li>
        <li>
                dow:星期,0-6,0为星期天</li>
        <li>
                command:命令</li>
</ul>
<p>
        这里,我们应该已经知道其大概的用法了。我们只要在对应的位置填写上我们需要的数字日期,就可以使用它来表示:<u>在某月(mon)的某天(dom)或者星期几(dow)的几点(h,24小时制)几分(m)执行某个命令(command)。</u></p>
<p>
        <span><strong>举个栗子:</strong></span></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_3527">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                        <div class="line number12 index11 alt1">
                                                                12</div>
                                                        <div class="line number13 index12 alt2">
                                                                13</div>
                                                        <div class="line number14 index13 alt1">
                                                                14</div>
                                                        <div class="line number15 index14 alt2">
                                                                15</div>
                                                        <div class="line number16 index15 alt1">
                                                                16</div>
                                                        <div class="line number17 index16 alt2">
                                                                17</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="plain plain">* * * * * php /path/to/your/cron.php</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="plain plain">5个星号分别代表定时指定每分、小时、日、月、周。</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                         </div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="plain plain">* 19 * * * php /var/www/cron/crontab.php</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="plain plain">讲第二个参数h填写为19,则表示每天的下午7点执行crontab.php。</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                         </div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="plain plain">* * * * * php /path/to/your/cron.php   </code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="plain plain">每隔一分钟执行一次任务 </code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                         </div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="plain plain">0 * * * * php /path/to/your/cron.php     </code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="plain plain">每小时的0点执行一次任务,比如6:00,10:00 </code>
</div>
                                                                <div class="line number12 index11 alt1">
                                                                         </div>
                                                                <div class="line number13 index12 alt2">
                                                                        <code class="plain plain">6,10 * 2 * * php /path/to/your/cron.php   </code>
</div>
                                                                <div class="line number14 index13 alt1">
                                                                        <code class="plain plain">每个月2号,每小时的6分和10分执行一次任务 </code>
</div>
                                                                <div class="line number15 index14 alt2">
                                                                         </div>
                                                                <div class="line number16 index15 alt1">
                                                                        <code class="plain plain">*/3,*/5 * * * * php /path/to/your/cron.php  </code>
</div>
                                                                <div class="line number17 index16 alt2">
                                                                        <code class="plain plain">每隔3分钟或5分钟执行一次任务,比如10:03,10:05,10:06</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
</div>
<p>
        在这个例子中,我们看到不仅有数字还有星号和/等等符号。这些符号可以让定时更加的灵活。</p>
<ul>
<li>
                *(星号):表示任意值,在相应位置填写*,可以代表任意执行。比如h为*,则为任意的小时</li>
        <li>
                ,(逗号):表示一个部分填写多个值,比如在m位置填写1,5代表1分钟或5分钟时候</li>
        <li>
                /(斜杠):表示每隔多久,比如在h部分填写*/2表示每隔2个小时,*/3表示每隔3个小时,</li>
        <li>
                */1和*无区别,所以可以省略。这里可以想想,*/2表示能被2整除的时间就好理解了。</li>
</ul>
<p>
        使用你的编辑器,保存-&gt;退出之后。<strong>重新启动cron任务</strong>。在每天的相应时间即可看到效果。</p>
<p>
        下面我们就先来说说php开发中,我常用的两种。</p>
<p>
        <span><strong>第一种:直接调用php文件</strong></span></p>
<p>
        这种比较简单,我们新建一个php文件。向一个文件插入一些简单的日期内容。</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterphp" id="highlighter_430203">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="php plain">#!/usr/bin/php -q</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="php plain">&lt;?php</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                         </div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="php variable">$file</code> <code class="php plain">= </code><code class="php string">"/var/www/"</code><code class="php plain">.</code><code class="php functions">date</code><code class="php plain">(</code><code class="php string">"h"</code><code class="php plain">).</code><code class="php string">"_"</code><code class="php plain">.</code><code class="php functions">date</code><code class="php plain">(</code><code class="php string">"i"</code><code class="php plain">).</code><code class="php string">"_"</code><code class="php plain">.</code><code class="php functions">date</code><code class="php plain">(</code><code class="php string">"s"</code><code class="php plain">).</code><code class="php string">".txt"</code><code class="php plain">;</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="php functions">file_put_contents</code><code class="php plain">(</code><code class="php variable">$file</code><code class="php plain">,</code><code class="php functions">date</code><code class="php plain">(</code><code class="php string">"y-m-d"</code><code class="php plain">));</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                         </div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="php plain">?&gt;</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
</div>
<p>
        <span><strong>注意:</strong></span>这种直接调用php文件需要在php文件最上方加入<code>#!/usr/bin/php -q</code>代码,而第二种方式(接下来会讲),是直接访问链接,通过apache来解析php,这种php脚本则不需要加这段代码。</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_30584">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="plain plain">1 6 * * * /path/to/your/cron.php</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="plain plain">每天的上午6点01分,执行cron.php文件</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
</div>
<p>
        <span><strong>第二种:通过访问url链接定时。</strong></span></p>
<p>
        访问url链接需要借助于浏览器来实现。我们选择lynx浏览器,lynx浏览器是一款轻便的web浏览器,使用于大部分unix 和linux系统环境。安装命令:</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_193365">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">lynx</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
</div>
<p>
        然后就可以和直接访问php文件类似的定时访问url啦。</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_525375">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">* * * * * lynx -dump http:</code><code class="bash plain">//weiya</code><code class="bash plain">.me</code><code class="bash plain">/index</code><code class="bash plain">.php</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
</div>
<p>
        注意这个地址最好用绝对地址,包含“http://”的完整url。</p>
<p>
        <span><strong>总结</strong></span></p>
<p>
        以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。</p>
<p>
        原文链接:https://www.weiya.me/item/54.html</p>
頁: [1]
查看完整版本: Ubuntu系统下用Crontab命令定时执行PHP文件详解