Re: [問題] 怎麼離開 at 工作排程

看板Linux作者 (小州)時間9年前 (2016/07/24 00:09), 編輯推噓6(600)
留言6則, 6人參與, 最新討論串2/3 (看更多)
※ 引述《abby8050 (LoRdOfCrEaTuRe)》之銘言: : 在命令列執行 : at now + 1 minute && echo 'Hello' : 就會進入at prompt : 接著打Ctrl d : 就會送出工作 : 請問要如何用命令表達 Ctrl d : 因為我是要把at的命令寫在PHP檔的shell_exec()裡面 : 例如說 : <?php : shell_exec("cd /"); : ?> : 是可以執行的 : 請問shell_exec()裡面要怎麼表達ctrl d 首先 at 預設是使用 standard input 讀入資料,所以你說到使用 ctrl d 這只是很單純 用來表示結束標準輸入的資料輸入,所以程式表示也讀到結尾了就知道你要跑的命令內容。 既然如此那轉一下,管線方式就可以簡單達成這類需求: echo "date > /tmp/date-result.txt" | at now + 1 minute 複雜一點真的要一堆命令,shell 下比方: cat << EOF | at now + 1 minute rm -f /path/backup cp -a /path2/mydoc /path/backup EOF 或者是怕麻煩可以先把指令每一行敘述打好變成一個文字檔案,然後丟給 at 也可以。 at now + 1 minute < at_script or cat at_script | at now + 1 minute 當然或者是直接寫好變成 shell script,at 只要告知執行該 script 就好: echo "/path/script.sh" | at now + 1 minute 若你寫 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 到其他目錄然後又執行其他命令敘述搭配一起用。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.37.134.65 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1469290141.A.ECB.html

07/24 00:21, , 1F
07/24 00:21, 1F

07/24 00:27, , 2F
推薦文章。
07/24 00:27, 2F

07/24 01:03, , 3F
推薦這篇文章。
07/24 01:03, 3F

07/24 11:59, , 4F
超用心的啊…推一下!!!
07/24 11:59, 4F

07/24 15:38, , 5F
太感謝啦!!
07/24 15:38, 5F

07/24 15:59, , 6F
07/24 15:59, 6F
文章代碼(AID): #1NavQTxB (Linux)
文章代碼(AID): #1NavQTxB (Linux)