前言:我已经解决了这个问题,并提出这个问题来分享我找到的解决方案。请记住,这里描述的问题可能(或可能不是)更普遍,并且不仅适用于 Bacula,还适用于其他服务。它也可能是 Debian 特有的,因为这似乎是打包的问题,但我目前无法在任何其他发行版上测试它。
问题:
设置 Bacula 安装时我遇到了文件守护进程的奇怪行为:
/etc/init.d/bacula-fd start
启动守护进程 OK/etc/init.d/bacula-fd stop
无法停止守护进程- 因此
/etc/init.d/bacula-fd restart
也会失败(PID 不会改变),所以新配置不适用 /etc/init.d/bacula-fd status
bacula-fd is not running ... failed!
尽管ps aux | grep bacula-fd
显示守护进程实际上正在运行,但仍会返回
PID 文件存在于其配置所在的位置并且其内容正确。
系统是 Debian Wheezy,Bacula 版本是 5.2.6(Wheezy 存储库中最新版本)。
该问题仅存在于安装了 Bacula 的部分机器上,在其他几台机器上运行正常。
/etc/bacula/bacula-fd.conf
受影响计算机上的FileDaemon 部分:
文件守护进程 { 姓名 = (此处为姓名) FDAddress =(此处为公网 IP) FD端口 = 13802 工作目录 = /var/lib/bacula Pid 目录 = /var/run/bacula 最大并发作业数 = 20 }
另一台未受影响的机器的输出为:
文件守护进程 { 姓名 = (此处为姓名) FD端口 = 9102 工作目录 = /var/lib/bacula Pid 目录 = /var/run/bacula 最大并发作业数 = 20 FD地址 = 192.168.1.10
如果我不能解决这个问题,我就无法使用脚本自动将配置更改应用于我的所有 Bacula 机器。这种行为可能是什么原因造成的?我该如何解决这个问题?
答案1
问题部分出在配置文件中,部分出在其他地方。在安装了 Bacula 的 20 台机器中,我修改了 bacula-fd 监听的默认端口(这样做是有原因的),事实证明这是问题的根源。至于 ,/etc/bacula/bacula-fd.conf
相关行是:FDport = 13802
。
问题是/etc/init.d/bacula-fd
端口是硬编码的(并且被调用返回的值覆盖getent services bacula-fd
),并且没有从 bacula-fd 配置文件中提取它。这不会阻止 init.d 脚本启动守护进程,但会导致检查其状态、停止并因此重新启动时出现问题。
为了解决这个问题,我修改了/etc/init.d/bacula-fd
更改PORT=9102
为正确的端口号:PORT=13802
。此外,我还编辑了文件/etc/services
,找到相关行并对其进行了如下修改:
bacula-fd 13802/tcp # Bacula 文件守护进程 bacula-fd 13802/udp
现在,/etc/init.d/bacula-fd
脚本运行起来非常好。