我有一個腳本下方,做了幾件事情...Unix shell腳本,需要調整腳本的性能?
#!/bin/bash
# Script to sync dr-xxxx
# 1. Check for locks and die if exists
# 2. CPIO directories found in cpio.cfg
# 3. RSYNC to remote server
# 5. TRAP and remove lock so we can run again
if ! mkdir /tmp/drsync.lock; then
printf "Failed to aquire lock.\n" >&2
exit 1
fi
trap 'rm -rf /tmp/drsync.lock' EXIT # remove the lockdir on exit
# Config specific to CPIO
BASE=/home/mirxx
DUMP_DIR=/usrx/drsync
CPIO_CFG="$BASE/cpio.cfg"
while LINE=: read -r f1 f2
do
echo "Working with $f1"
cd $f1
find . -print | cpio -o | gzip > $DUMP_DIR/$f2.cpio.gz
echo "Done for $f1"
done <"$CPIO_CFG"
RSYNC=/usr/bin/rsynC# use latest version
RSYNC_BW="4500" # 4.5MB/sec
DR_PATH=/usrx/drsync
DR_USER=root
DR_HOST=dr-xxxx
I=0
MAX_RESTARTS=5 # max rsync retries before quitting
LAST_EXIT_CODE=1
while [ $I -le $MAX_RESTARTS ]
do
I=$(($I + 1))
echo $I. start of rsync
$RSYNC \
--partial \
--progress \
--bwlimit=$RSYNC_BW \
-avh $DUMP_DIR/*gz \
[email protected]$DR_HOST:$DR_PATH
LAST_EXIT_CODE=$?
if [ $LAST_EXIT_CODE -eq 0 ]; then
break
fi
done
# check if successful
if [ $LAST_EXIT_CODE -ne 0 ]; then
echo rsync failed for $I times. giving up.
else
echo rsync successful after $I times.
fi
我想什麼上面的就是變化,此行..
find . -print | cpio -o | gzip > $DUMP_DIR/$f2.cpio.gz
我期待改變上述這樣它就可以爲CPIO_CFG中的每個入口啓動一個並行進程。我相信我必須在最後使用&?我是否應該實施任何安全預防措施?
是否也可以修改上述命令以包含一個排除列表,我可以通過cpio.cfg文件中的$ f3傳入。
對於下面的代碼..
while [ $I -le $MAX_RESTARTS ]
do
I=$(($I + 1))
echo $I. start of rsync
$RSYNC --partial --progress --bwlimit=$RSYNC_BW -avh $DUMP_DIR/*gz [email protected]$DR_HOST:$DR_PATH
LAST_EXIT_CODE=$?
if [ $LAST_EXIT_CODE -eq 0 ]; then
break
fi
done
這裏同樣的事情,是有可能運行多個線程RSYNC一個在$ dump_dir中發現的。廣州文件/ *。GZ
我覺得上面會大大提高我腳本的速度,這個框相當強壯(AIX 7.1,48內核和192GB RAM)。
謝謝你的幫助。
在發送到後臺的子shell中執行查找,例如'(cd $ f1 && find。-print | cpio -o | gzip> $ DUMP_DIR/$ f2.cpio.gz&)' –
這似乎是朝着正確的方向發展,我該如何做到這一點,所以我一直等到所有人在繼續使用腳本執行rsync之前,先完成CPIO。 – exxoid
'help wait'' wait',好吧,等待所有子流程完成 –