我需要在两台服务器之间同步一个目录,并决定创build一个服务来监听文件中的更改并运行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的服务,杀死其他两个。
在你的bash脚本中的while是作为原bash的分叉subprocess执行的。
这是正常的行为。
如果你做ps auxf你会看到父/子关系,虽然它不会说作为命令名,而是一个bash内部命令。