作為 www-data 運行 cronjob

作為 www-data 運行 cronjob

我的伺服器運行在 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';

經過這些更改後,一切都按預期進行。

相關內容