我有一个 RPM 包,它更新配置文件,因此需要重新启动该服务(rsyslog)。我支持的平台包括预系统版本(centos6)和系统版本(centos7+)。我的问题是检查 systemd 是否存在以及在哪里运行此更新后重新启动任务的最佳方法是什么?据我所知,这应该足够了:
%posttrans
if test pidof systemd = 1; then
systemctl restart rsyslog
else
service restart rsyslog
fi
答案1
service
systemctl
可用时可以使用。它将打印有关重定向到 /bin/systemctl 的通知,您可以安全地忽略它。因此,您可以使用:%posttrans service rsyslog restart
请注意,正确的顺序与您在问题中使用的顺序不同。
或者您可以使用 %rhel 宏。
%posttrans %if 0%{rhel} >=7 systemctl restart rsyslog %else service rsyslog restart %endif
但这是在构建时评估的。因此,您必须有一个用于 EL6 的二进制包,另一个用于 EL7+ 的二进制包。