存档

2015年11月 的存档

Systemd配置文件service小解

2015年11月30日 没有评论

最早看到systemd还是在微博上面看到陈浩在回答别人如何解决死掉的进程如何重启的,陈浩说systemd这个“神器”可以轻松解决这个问题。在那之前我对systemd还是一无所知的,所以特意google了一下systemd到底是个神马东西。

网上对systemd的评价毁誉参半,抵制systemd说它不稳定有时候可能crash,或者说脚本从原始Sysvinit移植到systemd会花费运维人员大量的时间(包含systemd的学习时间)之类的,甚至有人拿出来Unix的哲学“ do one thing and do it well”,说systemd做了系统启动等等很多工作,不见得都能把它做好。对于这些种种理由,我觉得没必要一一反击,看看这一篇《浅析 Linux 初始化 init 系统,第 3 部分: Systemd》。当然我觉得对开发和运维人员非常有必要学习systemd的原因是redhat7系列(centos7),debian系列等等linux主要衍生版本在他们的新版本中都在转投systemd怀抱,所以如果你是linux系统的使用者,我觉得学习了解systemd还是非常非常有必要的。

service配置样例

这是一个简单的脚本启动,进程终止以后会自动重启!

[Unit]
Description=a php im push script
Wants=network.target

[Service]
Type=simple
ExecStart=/path/to/your/script
Restart=always

[Install]
WantedBy=multi-user.target

Description是对服务的描述,方便记忆和阅读,一般来说这里可以随心所欲的。
Wants是服务项的启动依赖那些项。
Type是服务的类型,有simple,forking,oneshot,dbus,notify,idle。其中我们常用的类型有simple,forking,oneshot。simple 是默认,这是最简单的服务类型。意思就是说启动的程序就是主体程序,这个程序要是退出那么一切都退出。forking 标准 Unix Daemon 使用的启动方式。启动程序后会调用 fork() 函数,把必要的通信频道都设置好之后父进程退出,留下守护精灵的子进程。oneshot种服务类型就是启动,完成,没进程了。
ExecStart是启动脚本的路径和参数,参数和脚本之间用空格分割。
Restart是配置启动项是否需要重启,有no,on-success,on-failure,on-abnormal,on-watchdog,on-abort,always。这些选项就是他们字面意思,abnormal意思是反常的,看文档里面说除了信号SIGHUP,SIGINT,SIGTERM,SIGPIPE以外其他信号终止的,都是反常的包含code dump,操作超时等。
WantBy指服务在何种情况下面会被启动,例如上面multi-user.target指的是多用户环境。
当然我觉得这几个简单的配置项几乎就可以解决我们日常60%的问题了,其他特殊的需求可以查看文档。
如果你的英文还不错,可以查看下面2个英文手册,service手册unit手册

分类: Linux 标签: