我有一个小脚本需要停止服务。 这需要工作在Ubuntu(14.04),debian和Arch。 现在我所做的是类似的
case $(cat / etc / issue)中
* Ubuntu的*)
服务命令
* Debian的*)
/etc/init.d/servicename命令
*拱*)
systemctl服务命令
ESAC
有没有更好的方法来做到这一点?
我会说,不要看当前的发行版来确定哪个init系统用来pipe理守护进程:
虽然这不是万无一失的(一个系统可能会select将多个init系统并排安装),但我会这样做的方式是自己查找工具的存在 :
if command -v systemctl >/dev/null; then # assume systemd systemctl $command $servicename elif command -v initctl >/dev/null; then # assume upstart initctl $command $servicename elif command -v service >/dev/null; then # assume old Debian `service` utility service $servicename $command # ... elif cases for any other utils you'd want to check for ... else # assume bare init.d scripts /etc/init.d/$servicename $command fi
对类似问题的这个答案描述了一些进一步的启发式,可以用来确定当前正在使用的init系统,在这种情况下这是不够准确的。
但是,最终,没有办法真正检测安装“使用”哪个init系统 – 可以创build一个在每次启动时在init系统之间切换的设置。
我不会去与/ etc /问题,因为这个文件有时会改变,甚至可能不提及版本。
相反,你应该在我的意见search分配特定的文件。
对于你而言:
Debian: /etc/debian_version Ubuntu: /etc/lsb-release Arch: /etc/arch-release
我个人会检查文件的存在和“案件”它基于该文件
看到这里的一些其他分布文件
linuxmafia.com
如果你有其他原因, facter有一个operatingsystem事实,会做你想做的事情。
Ubuntu和debian都有服务工具。 使用service servicname start|stop一切,但拱门。