怎麼離開 at 工作排程 - Linux

Table of Contents

※ 引述《kenduest (小州)》之銘言::
: 若你寫 php 是希望達成執行 at 然後可以把資料餵给他,也就是直接程式與 at 互動的話
: 一般會用 popen 方式. 可以查一下 php 本身官方下面的 popen 例子很多程式碼參考
: http://php.net/manual/en/function.popen.php
: 比方:
: <?php
: $command= <<<EOF
: ls -l / > /tmp/ls-result.txt
: date > /tmp/date-result.txt
: EOF;
: $handle = popen("at 22:00","w");
: fwrite($handle,$command);
: fclose($handle);
: ?>
: 最後題外話 shell_exec("cd /"); 這樣一行敘述實際上執行之後,你後續的程式執行工作
: 目錄都還不會在 / 那邊,因為他是 spawn 一個 shell 去執行,執行之後結束該 shell
: 就消失了。除非你剛好一行內有 cd 到其他目錄然後又執行其他命令敘述搭配一起用。

其實是想在client指定的時間才寄出信。

以下方式都可以收到信,問題已解決。

1. 採用popen:

<?php
$command = "mail -s 'title' [email protected]";
$handle = popen("at 16:21 07242016", "w");
fwrite($handle, $command);
fclose($handle);
?>


2. 採用文字檔:
<?php
shell_exec("at 18:05 07242016 < /var/html/www/test.txt");

?>

附註: 假若其他朋友在試上面的code,發現在php cli執行可以收到信,
在網站上卻不能收到信,那有可能是web app被設在at拒絕名單了。
可以到/etc/at.deny 把代表你的web app的使用者刪掉。
例如: server是裝LAMP的話,使用者就是www-data

再次感謝k大>///<

--

All Comments

Caroline avatarCaroline2016-07-27
內建php不早就有mail函數,這樣多此一舉
Sandy avatarSandy2016-07-31
誤會意思。你 io 重導例子內確認 test.txt 在正確目錄
內嗎
另外不是提供 popen 範例有測試過嗎
Hazel avatarHazel2016-08-05
另外你應該有裝命令列版本的php, php xxx.php 可以執行
Edith avatarEdith2016-08-09
php cli 試了date > test.txt 不含at就可以 含at就不行
Robert avatarRobert2016-08-14
IO重導例子 test.txt寫成絕對路徑 php cli可以執行 但是
Harry avatarHarry2016-08-18
在網頁上點這個連結就不行
William avatarWilliam2016-08-22
確認檔案權限與selinux設定
Christine avatarChristine2016-08-26
檔案權限send_mail.php和test.txt都是777了 然後不知道
Margaret avatarMargaret2016-08-30
要搞懂selinux的哪一部分呢? (第一次聽到這個)
Agnes avatarAgnes2016-09-04
setenforce 0 暫時關閉後測試
Joseph avatarJoseph2016-09-04
先問你用哪個linux系統,rh based 才有selinux
Todd Johnson avatarTodd Johnson2016-09-06
ubuntu
Carol avatarCarol2016-09-10
我知道問題在哪裡了>< 要去/etc/at.deny把 www-data刪掉