**大家好,
小弟的網頁檔名為 add_job.php
裡面的程式碼如下如下:
<?php
$output = shell_exec('sudo crontab -u pi -l');
$job = '*/1 * * * * /usr/bin/php5 /home/pi/Downloads/job.php'. PHP_EOL;
file_put_contents('/var/www/crontab.txt', $output. $job);
exec('sudo crontab -u pi /var/www/crontab.txt');
echo 'crontab_jobs: '. shell_exec('sudo crontab -u pi -l'). '<br />';
?>
程式碼中出現的 pi 是小弟的作業系統 Raspbian 的預設帳號,
sudo 則是用來在 Raspbian 中,暫時化身 root 的權限執行 command
小弟的想法是:
先利用 sudo crontab -u pi -l 取得帳號 pi 現有的排程任務放到 $output,
然後 把我要新增的排程 $job 接在 $output 後面,寫入 /var/www/crontab.txt 中,
再執行 sudo crontab -u pi /var/www/crontab.txt
讓 crontab 為帳號 pi 新增 /var/www/crontab.txt 中的排程,
最後用 echo 'crontab_jobs: '. shell_exec('sudo crontab -u pi -l'). '<br />';
在網頁上輸出 目前的 排程 來確認 。
(其中/var/www 是我用來放置網頁的目錄,crontab.txt 和 add_job.php 都在這個目錄底下)
目前小弟遇到的問題是:
用瀏覽器觸發 add_job.php 後,
$job 有寫入 /var/www/crontab.txt,
但是,$output 是 ""(空的,
exec('sudo crontab -u pi /var/www/crontab.txt');
上面這句也沒有正常執行 (因為我在 cmd 中輸入 sudo crontab -u pi -l之後,
系統回應 no crontab for pi )
而
echo 'crontab_jobs: '. shell_exec('sudo crontab -u pi -l'). '<br />';
只有顯示 crontab_jobs:
表示 shell_exec('sudo crontab -u pi -l') 也沒有正常執行
但是當我直接在 cmd 中,輸入
sudo crontab -u pi -l
sudo crontab -u pi /var/www/crontab.txt
卻能夠順利的為帳號 pi 排程以及列出 pi 目前的排程
麻煩各位版友為小弟指點迷津,
感激不盡!!!**
執行 php script 的身分 (通常為 apache) 可以 sudo 嗎?
如果你的 php 程式在 /usr/bin 底下,你可以先在 add_job.php 前面加上
<pre class="c" name="code">#!/usr/bin/php -q
<?php
...
?>
然後在 console 底下執行 /usr/bin/php add_job.php 看看有沒有正常執行,確定程式沒有錯誤後,再去思考 apache 是否有權限可以 sudo,只是可以的話,非常不安全...
你犯了幾個認知錯誤:
所以要設定成功,必須:
這樣就行了。
安裝 curl 來執行php
crontab -e 不一定要最高權限才可以設排程
你可以固定時間去跑某支php程式,再透過資料庫或是文字檔去改變某個值來設定你目前要另外觸發的排程