我的伺服器運行在 Ubuntu 和 nginx 上。我的問題涉及克朗,我想使用檔案啟動它(crontab) -cron.txt,其內容:
* * * * * /usr/bin/php /var/www/html/test.php >> /var/log/cron.log
如果我使用命令運行它:crontab /var/www/html/cron.txt
,它工作完美,腳本測試.php正在被執行。但是當我執行相同操作但使用 PHP 腳本(透過瀏覽器執行)時:exec('crontab /var/www/html/cron.txt');
它不起作用。
透過指令檢查目前的 cronjob: crontab -l -u www-data
,檔案中的行出現,但 Cron 不執行其工作。也許這與某些權限問題有關?因為它只能以 root 身分執行才能運作。有沒有辦法強迫 Cron 也執行 www-data 的任務?
答案1
請用/etc/crontab
。這種執行 cron 作業的方法可讓您為任務新增使用者名稱。它看起來像這樣:
* * * * * www-data /usr/bin/php /var/www/html/test.php >> /var/log/cron.log
您可以執行此操作nano /etc/crontab
並將其新增至文件。
但是當我做同樣的事情但使用 PHP 腳本(透過瀏覽器執行): exec('crontab /var/www/html/cron.txt'); 時,它不起作用。
如果這不起作用,您可能會遇到除“crontab”使用之外的另一個問題。例如:不需要重定向嗎? (即> /dev/null 2>/dev/null &
在 exec 命令末尾使用?)。
答案2
我設法實現了我想要的,關於我最初的帖子中的程式碼的所有內容都很好,我唯一應該知道的是 www-data 用戶不允許寫入/var/log
,所以我在那裡沒有輸出。此外,在我的 PHP 腳本中,我試圖建立一個檔案並向其中寫入一些內容,要做的是,絕對路徑是必要的,所以它應該如下所示:
dirname(__FILE__) . '/myfile.txt';
經過這些更改後,一切都按預期進行。