我有bellow脚本来备份第10个服务器日志。
#!/bin/sh
filePath="/var/opt/AppServer/App/instances/default/logs/error.log.10"
backupDir="/backup_app-N/app/default/logs"
### Process Starts ####
md5File=`md5sum $filePath| awk -F" " '{print $1}'`
#echo $md5File
fileName=`basename $filePath| sed 's/.[0-9]\+//g'`
#echo $fileName
while [ 1 ]
do
md5Previous=$md5File
md5File=` md5sum $filePath| awk -F" " '{print $1}'`
#echo "Previous: $md5Previous Current: $md5File"
if [ $md5Previous != $md5File ]; then
exe_date=`date '+%m%d%y_%H%M%S'`
cp $filePath $backupDir/$fileName-$exe_date
echo "COPY :"$filePath" as " $backupDir/$fileName-$exe_date
gzip $backupDir/$fileName-$exe_date
fi
sleep 3
done
我有相同功能的相同脚本,但只更改 filePath 。 现在我想让一个脚本运行完成相同的任务。 (在一个脚本中保持相同的逻辑,而不是并发)
我做了以下事情 - 我创建了一个配置文件 - test.config
,我将所有 filePath 放入其中并从配置文件中读取路径。
#!/bin/sh
while [ 1 ]
do
while read path
do
filePath="$path"
backupDir="/backup_app-N/app/default/logs"
### Process Starts ####
md5File=`md5sum $filePath| awk -F" " '{print $1}'`
#echo $md5File "md"
fileName=`basename $filePath| sed 's/.[0-9]\+//g'`
#echo $fileName "file"
md5Previous=$md5File
md5File=` md5sum $filePath| awk -F" " '{print $1}'`
#echo "Previous: $md5Previous Current: $md5File"
if [ $md5Previous != $md5File ]; then
exe_date=`date '+%m%d%y_%H%M%S'`
cp $filePath $backupDir/$fileName-$exe_date
echo "COPY :"$filePath" as " $backupDir/$fileName-$exe_date
gzip $backupDir/$fileName-$exe_date
fi
done < test.conf
sleep 3
done
在test.config
中,我把路径视为
/var/opt/AppServer/App/instances-0/default/logs/error.log.10
/var/opt/AppServer/App/instances-1/default/logs/error.log.10
/var/opt/AppServer/App/instances-2/default/logs/error.log.10
/var/opt/AppServer/App/instances-3/default/logs/error.log.10
当我分别运行脚本时,我得到了结果。但我的修改后的工作不正常。
我认为问题出在while loop
上。一旦它进入,它需要4路径并执行第二次,循环从头开始,它不能保持最后状态!
我有疑问 - 可能的解决方案是什么?
以这种方式一起运行几个脚本我的方法是否合适?
我可以通过其他方式实现这一目标吗?