我有一些我不得不使用的 Plesk 服务器,并且我编写了一个脚本来通过 CLI 处理备份。问题在于,如果 Plesk 备份工具在备份域时遇到问题,它输出有用信息的唯一方法是整个备份作业是否使用详细标志运行。这样做的问题是它Domains [0/1]\n
在作业运行时每秒使工具输出一次,如果它运行一个小时,那么你就有 3600 行无用信息将有用信息推出缓冲区。例如:
Domains [0/1]
Domains [0/1]
Domains [0/1]
Domains [0/1]
Domains [0/1]
Domains [0/1]
Domains [0/1]
Domains [0/1]
Domains [0/1]
-------------- Start print backup log hire --------------
<?xml version="1.0" encoding="UTF-8"?>
<execution-result status="success" log-location="/usr/local/psa/PMM/sessions/2013-11-08-114156.109/migration.result"/>
-------------- End print backup log hire --------------
我一直在尝试做的是制作一个命令来通过它简单地替换\nDomains [\d+/\d+]
为一个井号,所以上面将变成:
Domains [0/1]########
-------------- Start print backup log hire --------------
<?xml version="1.0" encoding="UTF-8"?>
<execution-result status="success" log-location="/usr/local/psa/PMM/sessions/2013-11-08-114156.109/migration.result"/>
-------------- End print backup log hire --------------
我已经找到了使用sed
'sN
标志的方法,sed ':a;N;$!ba;s:\nDomains \[[0-9]\+/[0-9]\+\]:#:g'
或者使用 's 的一些捏造tr
,但这会导致整个输出被缓冲,并且只有在备份脚本完全完成后才会生成输出。
我怎样才能让这个替代品在流中工作,这样我仍然可以获得实时状态输出?
有问题的命令是:
ssh ${server} sudo ${pbackup} domains-name -v --output-file=${ftp_spec} $domain 2>&1 | \
sed ':a;N;$!ba;s:\nDomains \[0/1\]:X:g'
编辑:我还想出了一个简短的测试脚本来生成相关文本而无需运行十几个备份:
#!/bin/bash
echo "blah blah pre text"
i=0
while [ $i -lt 5 ]; do
echo 'Domains [0/1]'
sleep 1
i=$(($i + 1))
done
echo "blah blah post text"