首頁 > 後端開發 > php教程 > ubuntu - linux中定時任務crontab中的php任務無法執行,求可能的原因

ubuntu - linux中定時任務crontab中的php任務無法執行,求可能的原因

WBOY
發布: 2023-03-02 14:52:01
原創
1398 人瀏覽過

等待執行的test.php腳本,該腳本在本機環境可以執行,在linux上手動執行php test.php也可以執行

<code>$name='./log/20161025.txt';
if(file_exists($name))
{
    file_put_contents($name, '定时任务开始了');
}</code>
登入後複製
登入後複製

執行 crontab -e 編輯定時任務

<code>* * * * * /usr/bin/php /home/wwwroot/demo/test.php > /var/log/cron.log </code>
登入後複製
登入後複製

我的嘗試:

  • 執行ps -ef | grep cron,查看定時任務進程,可以看到一個進程,也就是說定時任務在運行,所以不存在定時任務沒有開啟的問題

  • 執行/usr/sbin/service cron restart,重啟定時任務,cron.log中沒記錄,20161025.txt中也沒有內容

  • 執行chomd +x test.php 增加權限,沒有效果

  • 執行which php,返回/usr/bin/php php路徑沒錯

暫時找不到可能的原因,求高手思路

補充:
最後測試定時任務是可以執行的

<code>$name=__DIR__.'/log/20161025.txt';

if(file_exists($name))
{
    file_put_contents($name,date('Y-m-d H:i:s',time())."\r\n",FILE_APPEND);
}</code>
登入後複製
登入後複製

用腳本的列印當前時間,這是每分鐘執行一次

回覆內容:

等待執行的test.php腳本,該腳本在本機環境可以執行,在linux上手動執行php test.php也可以執行

<code>$name='./log/20161025.txt';
if(file_exists($name))
{
    file_put_contents($name, '定时任务开始了');
}</code>
登入後複製
登入後複製

執行 crontab -e 編輯定時任務

<code>* * * * * /usr/bin/php /home/wwwroot/demo/test.php > /var/log/cron.log </code>
登入後複製
登入後複製

我的嘗試:

  • 執行ps -ef | grep cron,查看定時任務進程,可以看到一個進程,也就是說定時任務在運行,所以不存在定時任務沒有開啟的問題

  • 執行/usr/sbin/service cron restart,重啟定時任務,cron.log中沒記錄,20161025.txt中也沒有內容

  • 執行chomd +x test.php 增加權限,沒有效果

  • 執行which php,返回/usr/bin/php php路徑沒錯

暫時找不到可能的原因,求高手思路

補充:
最後測試定時任務是可以執行的

<code>$name=__DIR__.'/log/20161025.txt';

if(file_exists($name))
{
    file_put_contents($name,date('Y-m-d H:i:s',time())."\r\n",FILE_APPEND);
}</code>
登入後複製
登入後複製

用腳本的列印當前時間,這是每分鐘執行一次

php路徑沒錯,但啟動定時任務時工作目錄不是你的php檔案所在目錄,所以你的程式碼要改下

<code>$name=__DIR__.'/log/20161025.txt';
if(file_exists($name))
{
    file_put_contents($name, '定时任务开始了');
}</code>
登入後複製

感覺是路徑不對,php腳本裡面的相對地址改成絕對路徑試試

PHP路徑沒錯,錯在PHP程式碼裡面的一些路徑,在寫命令列的程式時,盡量避免使用有依賴性的東西,例如相對目錄,
你這個錯就出在相對目錄上,你啟動crontab去執行你的php腳本前,先手動執行一次,就知錯在哪裡。
把你的相對路徑印一下。一定不是你想像中的路徑。

你可以locate 20161025.txt,看下檔案有沒有產生。 locate前先updatedb

確定一下你的權限問題 執行以下crontab -l確定你已經成功加入了定時任務

<code>[DongYao$ 19:28]➞ $crontab -l
* * * * * /bin/echo `date` >> /var/log/test.log
You have mail in /var/mail/DongYao
[DongYao$ 19:39]➞ $

[root$ 19:37]➞ $tail -f /var/log/test.log 
Mon Oct 24 19:38:00 CST 2016
Mon Oct 24 19:39:00 CST 2016
</code>
登入後複製
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板