Мне нужно синхронизировать каталог между двумя серверами, и я решил создать службу, которая прослушивает изменения в файле и запускает rsync.
/usr/lib/systemd/system/mediasync.service
[Unit]
Description=SyncCdnImages
[Service]
#Type=simple
ExecStart=/usr/bin/mediasync.sh
#Restart=on-abort
[Install]
WantedBy=multi-user.target
/usr/bin/mediasync.sh
#!/bin/sh
inotifywait -mr -e close_write -e create "/var/www/html/folder/backend/utils/sync.log" | while read line
do
rsync -avzr --update /var/www/html/cdnimages/* myip:/var/www/html/cdnimages/cdnimages/
done
ps aux | grep sync
root 25540 0.0 0.0 115244 1424 ? Ss 11:31 0:00 /bin/sh /usr/bin/mediasync.sh
root 25541 0.0 0.0 6472 408 ? S 11:31 0:00 inotifywait -mr -e close_write -e create /var/www/html/folder/backend/utils/sync.log
root 25542 0.0 0.0 115244 392 ? S 11:31 0:00 /bin/sh /usr/bin/mediasync.sh
Я запускаю службу, используя systemctl start mediasync
но я не понимаю, почему он дважды появляется в списке процессов. Это нормальное поведение?
Редактировать:
Убиваем одну из служб ради бывшего kill 25540
, убивает и двух других.
В while
в вашем сценарии bash выполняется как разветвленный дочерний процесс исходного bash.
Это нормальное поведение.
Если вы это сделаете ps auxf
вы увидите отношения родитель / ребенок, хотя он не скажет while
как имя команды как while
это внутренняя команда bash.