我正在尝试在特定时间将文件从一个文件夹移动到另一个文件夹。为了实现这一点,我试图使用带有管道的Linux at命令:
`mv file /to/dest | at h:m d.m.y`
这就是我所写的:
$move = "mv $filename /destination/folder";
$at = "at $my_datetime";
$res = execute_pipe($move,$at);
其中execute_pipe函数定义如下:
function execute_pipe($cmd1 , $cmd2)
{
$proc_cmd1 = proc_open($cmd1,
array(
array("pipe","r"), //stdin
array("pipe","w"), //stdout
array("pipe","w") //stderr
),
$pipes);
$output_cmd1 = stream_get_contents($pipes[1]);
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
$return_value_cmd1 = proc_close($proc_cmd1);
$proc_cmd2 = proc_open($cmd2,
array(
array("pipe","r"), //stdin
array("pipe","w"), //stdout
array("pipe","w") //stderr
),
$pipes);
fwrite($pipes[0], $output_cmd1);
fclose($pipes[0]);
$output_cmd2 = stream_get_contents($pipes[1]);
fclose($pipes[1]);
fclose($pipes[2]);
$return_value_cmd2 = proc_close($proc_cmd2);
return $output_cmd2;
}
问题是文件立即被移动,忽略了at
命令。我错过了什么?有更好的方法吗?
答案 0 :(得分:0)
对我来说,似乎你的问题与PHP无关。您只是错误地使用了Shell。
at
的手册页读取:
at and batch read commands from standard input or a specified file which are to be executed at a later time, using /bin/sh.
但是你对shell的使用会执行你的" mv文件/目的地"命令,然后将该命令的OUTPUT传递给at
。在成功的移动操作中,输出将一无所获。因此,通过使用管道,您实际上会立即移动文件并告诉at
在指定时间不执行任何操作。
通过在终端中键入at
来阅读man at
的手册页以解决问题。提示:如果你想使用STD INPUT,回复你的命令可能会有所帮助;)