![upstart 配置以非 root 用户身份启动同步守护进程](https://linux22.com/image/1092011/upstart%20%E9%85%8D%E7%BD%AE%E4%BB%A5%E9%9D%9E%20root%20%E7%94%A8%E6%88%B7%E8%BA%AB%E4%BB%BD%E5%90%AF%E5%8A%A8%E5%90%8C%E6%AD%A5%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B.png)
我打算使用同步将数据从主服务器同步到多个客户端服务器。我在主服务器和从服务器中都创建了一个名为 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 中。