Re: [问题] 怎么离开 at 工作排程

楼主: kenduest (小州)   2016-07-24 00:08:58
※ 引述《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 到其他目录然后又执行其他命令叙述搭配一起用。
作者: Hevak (Arthow Eshes)   2016-07-24 00:21:00
作者: Debian (Debian)   2016-07-24 00:27:00
推荐文章。
作者: soem (流水)   2016-07-24 01:03:00
推荐这篇文章。
作者: bottomless (碎)   2016-07-24 11:59:00
超用心的啊…推一下!!!
作者: abby8050 (LoRdOfCrEaTuRe)   2016-07-24 15:38:00
太感谢啦!!
作者: kenwufederer (Nash)   2016-07-24 15:59:00

Links booklink

Contact Us: admin [ a t ] ucptt.com