如何复制守护进程?

如何复制守护进程?

我想运行 dnscrypt 客户端代理的两个实例,但我无法让它们在启动时自动启动。这是我尝试过的:

在 中rc.local,这是第一个:

/usr/local/sbin/dnscrypt-proxy -a 127.0.0.1:40 -u _dnscrypt-proxy -d -l /dev/null -R dnscrypt.eu-dk

第二个:

/usr/local/sbin/dnscrypt-proxy2 -a 127.0.0.1:41 -u _dnscrypt-proxy2 -d -l /dev/null -R dnscrypt.org-fr

cd/usr/local/sbin了一个cp dnscrypt-proxy dnscrypt-proxy2然后当我重新启动时我会得到[ERROR] Unknown User : [dnscrypt-proxy2].

然后我搜索并看到了这个问题然后我手动编辑/etc/passwd并添加一个新用户,小心地复制默认_dnscrypt-proxy用户并更改 id,因为现在它有这两个条目:

_dnscrypt-proxy:*688:688:dnscrypt-proxy user:/var/empty:/sbin/nologin 
_dnscrypt-proxy2:*689:689:dnscrypt-proxy2 user:/var/empty:/sbin/nologin`

当我重新启动时,未知用户错误仍然存​​在。对该文件夹的快速ls查看显示我确实复制了该文件夹。Ps aux显示守护进程尚未启动。谷歌搜索没有帮助我,所以我向这里的 Linux 专家求助。我的操作系统是 OpenBSD 5.7。

答案1

第一的,这是对为什么未知用户错误仍然存​​在的问题的具体答案:错误在于您创建用户的方式。有更多的文件需要修复,而不仅仅是/etc/passwd.

正确创建用户的最简单方法是简单地删除该行/etc/passwd,然后运行adduser -noconfig -shell -/sbin/nologin。 (当您编辑 /etc/passwd 时,请使用vipw而不只是vi /etc/passwd- 请参阅手册页以获取说明!)

第二,您确实不需要创建第二个用户。您可以运行同一程序两次,而无需该程序的副本或第二个用户来运行该程序。要使用相同的用户和二进制文件但使用不同的设置运行第二个守护程序,您需要做的很简单:

  • 将守护程序的初始化脚本复制到另一个名称的脚本中。 (你已经这样做了。)
  • 编辑新的初始化脚本。保持相同的二进制路径和相同的用户名。改变仅有的您想要更改的选项!

瞧 - 你准备好跑步了!

答案2

几点:

  1. 您不需要复制dnscrypt-proxy二进制文件 - 只需使用不同的选项多次调用它
  2. 当您创建_dnscrypt-proxy2用户时,您是否也创建了他们的主要组?我看到该用户的 GID 与_dnscrypt-proxy(689而不是688) 不同,但您没有提到复制组。如果没有,请创建缺失的组。您可以通过编辑/etc/group和添加缺少的条目来完成此操作(我猜测是通过复制 group 的条目_dnscrypt-proxy)。

观点2应该可以解决你的问题。

答案3

来自rcctl(8)手册页:

出于不同目的运行给定守护程序的第二个副本的推荐方法是创建指向其 rc.d(8) 控制脚本的符号链接:

# ln -s /etc/rc.d/snmpd /etc/rc.d/snmpd6
# rcctl set snmpd6 status on
# rcctl set snmpd6 flags -D addr=2001:db8::1234
# rcctl start snmpd6

相关内容