Linux 服务

启动Linux服务,一般有两种方法, 一种是service, 一种是systemctl

1
2
service nginx start
systemctl start nginx

service是比较老的系统的管理方式, systemctl是比较新的管理方式,一些老的系统不支持systemctl, 但新的系统systemctl会兼容service

service start其实执行的是/etc/init.d/下面的shell脚本,脚本中定义了start,stop等操作。这些脚本需要我们自己编写。

systemctl是比较新的系统里的服务管理方式,systemctl脚本都放在/etc/systemd/system/(Ubuntu)或者/usr/lib/systemd/system(Centos)下。如果在该目录下找不到相应的脚本,它会去/etc/init.d目录下找service的启动脚本。

systemd init系统

大部分Linux发行版,如Rhel,CentOS,Fedora,Ubuntu,Debian和Archlinux,都采用systemd作为其初始系统。实际上,Systemd不仅仅是一个init系统,这也是为什么有些人强烈反对其设计的原因之一,这违背了公认的unix座右铭:“做一件事,做得好”。systemd使用自己的.service文件, 其他init系统使用简单的shell脚本来管理服务,不过慢慢的就会被systemctl取代,这里主要介绍systemcl的一些操作以及systemd服务脚本编写。

基本命令

  1. 启动与停止

    1
    2
    systemctl stop nginx
    systemctl start nginx
  2. 查看服务状态

    1
    systemctl status nginx
  3. 设置服务开机启动

    1
    systemctl enable nginx
  4. 查看服务log

    1
    journalctl -u foo-daemon

自定义服务

新建一个systemd service file /etc/systemd/system/demo.service

1
2
sudo touch /etc/systemd/system/demo.service
sudo chmod 664 /etc/systemd/system/demo.service

写入以下内容, /usr/sbin/demo 可以是自己随便写一个小程序

1
2
3
4
5
6
7
8
[Unit]
Description=A Systemd Service Demo

[Service]
ExecStart=/usr/sbin/demo

[Install]
WantedBy=multi-user.target

加载脚本

1
sudo systemctl daemon-reload

现在 就创建了一个linux服务,我们就可以用systemctl操作我们服务了

1
2
3
4
sudo systemctl start demo
sudo systemctl stop demo
sudo systemctl restart demo
systemctl status demo

更多有关systemctl介绍 请查看systemd