我想知道如何使用自定义参数运行守护程序(在本例中为 NTP)。
例如,在我的 Ubuntu PC 中,我观察到我以ntpd
这种方式运行:
$ ps aux | grep ntpd
ntp 5936 ... 0:00 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 119:127
您可能会注意到该-g
参数。
但在我的 Gentoo PC 中,我运行相同的命令,我可以观察到 ntp 守护进程没有使用该-g
参数运行,我想添加它!
这是一个特定于发行版的问题吗?我该如何处理这个问题?
答案1
猜测来自Gentoo 维基,编辑NTPD_OPTS
可能/etc/conf.d/ntpd
可以解决问题(无论是否-g
建议这样做,不知道)。
答案2
在 Debian 和 Ubuntu 中,守护进程通常会在 中设置一些配置参数/etc/default/daemon-name
,例如/etc/default/ntp
:
NTPD_OPTS='-g'
该文件来源于/etc/init.d/ntp
,并适当使用了相应变量的值:
# near the beginning
if [ -r /etc/default/ntp ]; then
. /etc/default/ntp
fi
# later
start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE --startas $DAEMON \
-- -p $PIDFILE $NTPD_OPTS
不知道Gentoo有没有类似的东西。
答案3
守护进程就像从源代码编写并编译为可执行格式的任何其他程序一样,可以使其接受参数、处理参数,例如将它们用作指定开关的参数或参数本身。守护进程和程序之间的区别本质上可以是程序的守护进程模式将任务切换到后台模式,并且可选地根据服务的要求,监听网络接口并通过线路接受请求。因此,在 shell 提示符下从命令行传递参数或在脚本中指定守护程序可执行文件的路径后立即传递参数是相同的。然而,在 shell 脚本中使用必要的参数调用守护进程的配置或变量的方法可能在风格或约定上有所不同。重要的是阅读手册(如果提供),以了解守护程序可执行文件或程序接受哪些参数,并在将它们用于执行之前了解它们的用途,而不仅仅是提供选项。
答案4
不同的发行版有不同的做法。一般来说,在下面搜索/etc
该特定守护进程的启动位置(grep -r ntpd /etc
或find /etc -type f -exec grep ntpd {} +
),然后查看启动它的脚本如何获取其参数。或者,请参阅您的发行版文档以了解一般原则。
通常,要么有一个大型 shell 脚本或其他配置文件来启动许多服务,要么每个服务都有一个脚本或配置文件。这些参数可以在该脚本中给出,也可以从其他配置文件中设置的变量中获取。常见位置包括/etc/init*
、/etc/rc*
和/etc/default/*
。