我对从 19.10 升级而来的 Ubuntu Server 20.04 有一个奇怪的问题。
我在 systemd/system 19.10 中定义了一个服务。它在该版本中运行没有任何问题。
现在,我需要更改服务文件中的某些设置。因此,我编辑了文件,使用 daemon-reload 重新加载它并尝试使用新文件,但 systemd 继续使用旧文件。我知道它正在使用旧文件,因为从状态显示中可以看到这两个版本指向不同的二进制文件。
每次启动服务时,systemctl 都会警告我使用 daemon-reload 重新加载更改的文件。使用 daemon-reload,即使重启也无法解决。
我尝试删除服务文件并重新加载。启动时提示未找到服务,这很好。但是当我将更改后的文件放回去时,它仍然使用旧文件,而服务文件没有任何问题。
我想知道除了 /etc/systemd/system 之外是否还有其他地方可以保存所有设置?
谢谢。
答案1
问题已解决。
问题发现在服务文件的[unit]中,有一行写着:SourcePath=/etc/init.d/<old.service.file>
删除该行并重新加载后,问题已解决。
奇怪的是,服务文件和 init.d 中的请求文件被缓存在 systemd 的某个地方。
我把这个问题留在这里,以便将来遇到同样问题的人能够解决。
答案2
遇到过类似的情况,我在我的一个单元文件中犯了一个语法错误,并sudo service <servicename> status
显示错误,我修复了单元文件中的错误。我没有任何SourcePath
行。
我做了一个sudo systemctl daemon-reload
,但还是出现了同样的错误。也试过了,但sudo systemctl daemon-reexec
没有任何效果。最后重启了系统,重新加载了新文件。事实证明,重启系统比试图弄清楚为什么 systemd 加载旧版本的文件更快。