upstart 配置以非 root 用户身份启动同步守护进程

upstart 配置以非 root 用户身份启动同步守护进程

我打算使用同步将数据从主服务器同步到多个客户端服务器。我在主服务器和从服务器中都创建了一个名为 rsyncuser 的用户,并赋予其访问权限以及从主服务器到从服务器的无密码 ssh 访问权。

当我以 rsyncuser 身份从命令行使用 Inosync 时,它正在运行。

接下来我想让它在服务器开启时自动启动。我认为 upstart 是实现这个功能的方法。

我无法找到正确的 upstart 命令来实现这个功能。

这是我的 upstart conf 文件。问题似乎出在以给定用户身份运行“inosync -d -c /etc/inosync/inosync_rsyncuser.py”上。

正如您所看到的,我尝试了许多不同的选择!

描述“启动 inosync 以 rsyncuser 身份同步数据到其他 CDN 服务器”
控制台输出
#开机时启动
#关机时停止
启动(网络设备和本地文件系统)
在运行级别 [016] 停止

#在运行级别启动 [2345]
#在运行级别停止 [!2345]
#终止超时 30
env RUN_AS_USER=rsyncuser

期望分叉

脚本
   echo "Inosync updtart 作业似乎已启动" >> /tmp/upstart.log
# 执行 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
# 发出 inosync_running
结束脚本

答案1

我认为应该这样做:

exec su -c command_to_execute - $RUN_AS_USER

答案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

这应该在网络启动且本地文件系统可用时立即启动,并且仅在关机/重启时停止。在 inosync 中使用“expect fork”的原因是,除非您使用 -d,否则它不会分叉,这理想情况下是所有 upstart 托管服务的工作方式。

另外,通过管道传输到记录器将允许您利用 syslog 设置,而不是在某处创建另一个日志文件。daemon.notice 应该最终位于 /var/log/daemon.log 中。

相关内容