将输出重定向到两个文件,如果它死了则重新启动整个过程

时间:2015-06-29 18:55:00

标签: php linux bash process

当我执行以下命令时,我有一台在我的机器上运行的PHP服务器:

php src/server.php > >(tee -a ./logs/logs.txt) 2> >(echo "$(date)"; tee -a ./logs/errors.log >&2)

如果我没有弄错,它应该运行服务器,提示所有消息到控制台并将它们写入./logs/logs.txt,并单独将错误输出写入带有时间戳的.logs / errors.log。

该命令在我的控制台中运行良好,并在创建日志文件时启动服务器。

我正在寻找一种方法将此行放在(bash?)脚本中,以便我可以将其与this StackOverflow solution结合使用,以便在崩溃时重新启动服务器。现在,我尝试过这样的事情:

#!/bin/bash

php src/server.php >> >(echo "$(date)"; tee -a ./logs/logs.txt) 2>> >(echo "$(date)"; tee -a ./logs/errors.log >&2)

但它给了我以下错误:

startServer.sh: line 3: syntax error near unexpected token `>'
startServer.sh: line 3: `php src/server.php >> >(echo "$(date)"; tee -a ./logs/logs.txt) 2>> >(echo "$(date)"; tee -a ./logs/errors.log >&2)'

当我直接运行命令时,我不明白为什么它不能正常运行。这是#!bin/bash代码的问题?或者我应该用管道替换>>(它仍会按预期工作吗?)?

此外,在重启过程解决方案中,有一个until myserver; do行。我应该写什么而不是myserverstartServer

谢谢大家:)

编辑:似乎2> >(echo "$(date)"; tee -a ./logs/errors.log >&2)确实将错误消息放在errors.log中,但它不会在之前的文件中打印日期。 :(

0 个答案:

没有答案