( nagylzs | 2012. 09. 28., p – 12:03 )

Beállítottam az rsync-et úgy ahogy leírtátok. Megfelelő a sebessége is. Viszont néha IDLE állapotba kerül a processz és úgy marad. Így a mentések nem valami megbízhatóak. Van egy shell script ami az rsync-et meghívja több könyvtárra. (Van aminek átad --delete kapcsolót is, van aminek nem.) Ha elindítom a script-et akkor valami ilyesmik futnak:

# ps ax | grep rsync
115 1 S+ 0:00.01 tail -f rsync_data_images.log
99836 1 S 0:00.01 /bin/sh ./rsync_with_backup.sh 2 rsync_with_backup.log
99837 1 D 0:23.77 rsync -avz --log-file rsync_data_images.log /data/images root@backup:/data
99838 1 S 0:05.19 ssh -l root backup rsync --server -vlogDtprze.iLf . /data
2371 5 DL+ 0:00.00 grep rsync

Namost az a gond hogy az az rsync processz ami a logfile-t írja az egyszercsak "megáll". Mintha örökké várakozna valamire. Nincsen hibaüzenet.

Amikor épp nincs kedve lefagyni, akkor a log állomány valahogy így ér véget:

2012/09/28 05:46:29 [99837] 2012/09/28 05:46:58 [99837] sent 43587897 bytes received 6312 bytes 174726.29 bytes/sec
2012/09/28 05:46:58 [99837] total size is 106395200103 speedup is 2440.58

Viszont ha épp úgy van kedve hogy nem megy tovább akkor ilyesmit látok:

2012/09/28 05:52:52 [7642] 2012/09/28 05:52:52 [7642] 2012/09/28 05:52:52 [7642] 2012/09/28 05:52:52 [7642] 2012/09/28 05:52:52 [7642] 2012/09/28 05:52:52 [7642] 2012/09/28 05:52:52 [7642] 2012/09/28 05:52:52 [7642] 2012/09/28 05:52:52 [7642] 2012/09/28 05:52:52 [7642]

Itt a vége. Szóval nincs hibaüzenet. A processz az fut, a log állomány meg van nyitva írásra, de semmit nem ír bele. A hálózati kapcsolat hibáját kizárnám. De mégha ez is lenne a baj akkor is az rsync-nek valami hibával kellene leállni ahelyett hogy a semmire várna.

Namost ami még furcsább, hogy az rsync-et a script indítja el. Az rsync az IDLE, de közben a shell script elkezdi zabálni a CPU-t. Valahogy így:

gandalf@shopzeus# ps ax | grep rsync
7642 1 I 0:07.41 rsync -avz --log-file rsync_data_media.log /data/media root@backup:/data
7643 1 I 0:18.13 ssh -l root backup rsync --server -vlogDtprze.iLf . /data
11636 1 S+ 0:00.00 grep rsync
99836 1 R 3:20.26 /bin/sh ./rsync_with_backup.sh 2 rsync_with_backup.log

Itt 99836 script indította el 7642 rsync parancsot. Ennek ellenére az sh script az [R]unning, az rsync az meg [I]dle. A top-ban meg így néz ki a dolog:

CPU: 39.1% user, 0.0% nice, 9.6% system, 0.5% interrupt, 50.7% idle
Mem: 7791M Active, 5397M Inact, 3259M Wired, 1042M Cache, 2465M Buf, 25M Free
Swap: 12G Total, 7916K Used, 12G Free

PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
99836 root 1 119 0 8340K 1640K CPU0 0 6:46 100.00% /bin/sh ./rsync_with_backup.sh 2 rsync_with_backup.log

Tehát a shell script 100% CPU-t zabál. Amit nem igazán értek, mert a shell scriptnek kb. semmit nem kellene csinálnia a várakozáson kívül. Érdekes módon ha küldök neki egy TERM szignált akkor szépen kilép. Szóval igazából nincs lefagyva, de fogalmam nincs mit csinál.

Majd biztos lesz valaki aki strace-t fog javasolni. De ennek nem sok értelme van. Egyrészt a shell script zabálja a CPU-t, és a bourne shell az nem hiszem hogy bugos. :-) Az rsync-re is tehetnék strace-t, de az egy elég durva napló lesz. Bár most nincs más ötletem.

Amúgy a shell script fagyós része az valahogy így néz ki:

#!/bin/sh

data_copy_only="images
incbackups
konyveles
log
media
pgbackups
product_list
settlement"

for i in $data_copy_only
do
echo "#================================================"
echo "# rsync -avz --log-file rsync_data_${i}.log /data/${i} root@backup:/data"
echo "#================================================"
`rsync -avz --log-file rsync_data_${i}.log /data/${i} root@backup:/data`
done

Nem egy bonyolult dolog, és halvány gőzöm nincs hogy ebből hogy csinál 100% CPU terhelést?

Valaki???