upstart config to start sync daemon as non-root user
I am planning to use inosync to sync data from master server to several client servers. I have created a user called rsyncuser in both master and slaves with access permissions and passwordless ssh access from master to slave servers.
Inosync is working when I use it from the command line as rsyncuser.
Next I want this to start automatically when server is turned on. I figured upstart is the way to get this working.
I am unable to find the right upstart command to get this working.
Here is my upstart conf file. The problem seems to be around running "inosync -d -c /etc/inosync/inosync_rsyncuser.py" as a given user.
As you can see I have tried a number of various options!
description "start inosync to sync data to other CDN Servers as rsyncuser" console output #start on startup #stop on shutdown start on (net-device-up and local-filesystems) stop on runlevel [016] #start on runlevel [2345] #stop on runlevel [!2345] #kill timeout 30 env RUN_AS_USER=rsyncuser expect fork script echo "Inosync updtart job seems to have started" >> /tmp/upstart.log # exec sudo -u rsyncuser -c "ls -la" >> /tmp/upstart.log 2>&1 # LOGFILE=/var/log/logfile.`date +%Y-%m-%d`.log # exec su - $RUN_AS_USER -c "inosync -d -c /etc/inosync/inosync_rsyncuser.py" >> $LOGFILE 2>&1 # exec su -c "ls -la" >> /tmp/upstart.log 2>&1 # emit inosync_running end script
Solution 1:
I think this should do it:
exec su -c command_to_execute - $RUN_AS_USER
Solution 2:
start on (net-device-up IFACE!=lo and local-filesystems)
stop on runlevel [016]
respawn
exec su -c '/usr/bin/inosync -c /etc/inosync/inosync_rsyncuser.py | logger -p daemon.notice -t inosync' rsyncuser
This should start as soon as the network is up and the local filesystems are available, and stop only when you shutdown/reboot. There is no reason to use 'expect fork' with inosync, as it doesn't fork unless you use -d, which is ideally how all upstart managed services would work.
Also piping to logger will allow you to leverage your syslog setup rather than creating another log file somewhere. daemon.notice should end up in /var/log/daemon.log.