怎麼離開 at 工作排程 - Linux

By Charlie
at 2016-07-24T00:08
at 2016-07-24T00:08
Table of Contents
※ 引述《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 到其他目錄然後又執行其他命令敘述搭配一起用。
--
: 在命令列執行
: 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 到其他目錄然後又執行其他命令敘述搭配一起用。
--
Tags:
Linux
All Comments

By Callum
at 2016-07-28T21:20
at 2016-07-28T21:20

By Isabella
at 2016-07-29T10:45
at 2016-07-29T10:45

By Suhail Hany
at 2016-07-30T05:00
at 2016-07-30T05:00

By Hardy
at 2016-08-01T14:27
at 2016-08-01T14:27

By Barb Cronin
at 2016-08-04T19:02
at 2016-08-04T19:02

By James
at 2016-08-07T13:14
at 2016-08-07T13:14
Related Posts
怎麼離開 at 工作排程

By William
at 2016-07-23T23:25
at 2016-07-23T23:25
Ubuntu + 兩個 Win10 多重開機

By Olive
at 2016-07-23T23:04
at 2016-07-23T23:04
VNC與RDP遠端 連接ubuntu的問題

By Donna
at 2016-07-22T13:57
at 2016-07-22T13:57
evolution 突然無法收信

By Bethany
at 2016-07-19T22:48
at 2016-07-19T22:48
Ubuntu Forums 被入侵 用戶資料被竊

By Valerie
at 2016-07-19T14:01
at 2016-07-19T14:01