【发布时间】:2017-02-03 00:20:39
【问题描述】:
英语不是我的母语,如有任何语言问题,请接受我的歉意。
我想通过 CRON 执行一个脚本(bash / sh),它将执行各种维护操作,包括备份。该脚本将执行其他脚本,每个函数一个。我希望为每个执行的脚本将打印的全部内容保存在一个单独的文件中。
问题在于,这些其他脚本中的每一个都执行“duplicity”、“certbot”、“maldet”等命令。每个脚本中的“ECHO”命令都打印在文件中,但“duplicity”、“certbot”和“maldet”命令的输出不会! 我想避免必须在每一行上放置“| tee --append”或其他命令。但即使在每一行都这样做,“下标”也不会保存在日志文件中。也就是说,理想情况下,您可以在父脚本中指定每个脚本在哪个文件中打印。
不起作用:
-
sudo bash /duplicityscript > /path/log或
sudo bash /duplicityscript >> /path/log
-
sudo bash /duplicityscript | sudo tee –append /path/log > /dev/null或
sudo bash /duplicityscript | sudo tee –append /path/log
-
使用 exec (like this):
exec > >(tee -i /path/log) sudo bash /duplicityscript exec > >(tee -i /dev/null)`
示例:
./maincron:
sudo ./duplicityscript > /myduplicity.log
sudo ./maldetscript > /mymaldet.log
sudo ./certbotscript > /mycertbot.log
./duplicityscript:
echo "Exporting Mysql/MariaDB..."
{dump command}
echo "Exporting postgres..."
{dump command}
echo "Start duplicity data backup to server 1..."
{duplicity command}
echo "Start duplicity data backup to server 2..."
{duplicity command}
在日志文件中,将打印:
Exporting Mysql/MariaDB...
Exporting postgres...
Start duplicity data backup to server 1...
Start duplicity data backup to server 2...
在上面的示例中,每个脚本中的“ECHO”命令将保存在日志文件中,但 duplicity 和 dump 命令的输出将打印在屏幕上而不是日志文件中。
我做了一个googlada,我什至看到了this topic,但我无法适应我的需要。
输出也打印在屏幕上没有问题,只要它是完整的,打印在文件上。
【问题讨论】:
-
您是否检查过不服从您的重定向的命令是否正在 stderr 上打印?尝试在行尾添加
2>&1(在第一次重定向之后,用于标准输入)。 -
sudo只适用于命令,重定向是一个单独的过程,所以su sh -c "/duplicityscript > /path/log"。 (或su bash -c "command"...您的选择)注意将sudo更新为su。 -
不要在没有 sudo 的情况下工作。我删除了 sudo,cron 以 root 身份运行。谢谢。
标签: bash shell output sh centos7