tMerge branch 'rspawn' - synk - synchronize files between hosts
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 9e7246ff44e8e5a2bd5813d37683bc5640f6f8d7
(DIR) parent 82e2b998925748562da710ef5ec8a01df652ef01
(HTM) Author: Willy <willyatmailoodotorg>
Date: Fri, 2 Sep 2016 19:02:03 +0200
Merge branch 'rspawn'
Diffstat:
M synk.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+), 0 deletions(-)
---
(DIR) diff --git a/synk.c b/synk.c
t@@ -77,6 +77,7 @@ int uptodate(struct peers_t *);
int flushpeers(struct peers_t *);
int syncwithmaster(struct peer_t *master, struct peers_t *plist);
int dosync(struct peer_t *master, struct peer_t *slave);
+int spawnremote(struct peers_t *);
const char *rsync_cmd[] = { "rsync", "-azEq", "--delete", NULL };
const char *ssh_cmd[] = { "ssh", NULL };
t@@ -516,6 +517,28 @@ syncfile(struct peers_t *plist, const char *fn)
}
int
+spawnremote(struct peers_t *plist)
+{
+ char **cmd = NULL;
+ char synk_cmd[_POSIX_ARG_MAX];
+
+ struct peer_t *tmp;
+
+ SLIST_FOREACH(tmp, plist, entries) {
+ snprintf(synk_cmd, _POSIX_ARG_MAX, "/usr/local/bin/synk -s -h %s",
+ inet_ntoa(tmp->peer.sin_addr));
+ cmd = concat(2, ssh_cmd, (char *[]){ inet_ntoa(tmp->peer.sin_addr), synk_cmd, NULL });
+ if (!fork()) {
+ puts(echo(cmd));
+ execvp(cmd[0], cmd);
+ perror(cmd[0]);
+ return -1;
+ }
+ }
+ return 0;
+}
+
+int
main(int argc, char *argv[])
{
char *argv0, *fn;
t@@ -543,6 +566,8 @@ main(int argc, char *argv[])
switch(mode) {
case SYNK_CLIENT:
while ((fn = *(argv++)) != NULL) {
+ spawnremote(&plist);
+ sleep(1);
syncfile(&plist, fn);
}
break;