ubuntu 16.04 service 基础要点

前端之家收集整理的这篇文章主要介绍了ubuntu 16.04 service 基础要点前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

搞了两天,对16.04的service基本上有一个比较清晰的掌握了。16.04转用了systemd来对系统服务提供管理和控制(貌似15.04就已经转用了)。

添加一个服务(service)

添加一个服务,需要创建一个服务的定义文件放在 /lib/systemd/system 目录下,这里以 Nginx.service 为例:

  1. [Unit]
  2. Description=The Nginx HTTP and reverse proxy server
  3. After=syslog.target network.target remote-fs.target nss-lookup.target
  4.  
  5. [Service]
  6. Type=forking
  7. PIDFile=/run/Nginx.pid
  8. ExecStartPre=/usr/sbin/Nginx -t
  9. ExecStart=/usr/sbin/Nginx
  10. ExecReload=/bin/kill -s HUP $MAINPID
  11. ExecStop=/bin/kill -s QUIT $MAINPID
  12. PrivateTmp=true
  13.  
  14. [Install]
  15. WantedBy=multi-user.target

创建了这个文件后,还无法直接使用。

  1. service Nginx start
  2. systemctl start Nginx
  3. systemctl start Nginx.service

执行上述的命令后,会提示以下的错误

  1. Job for Nginx.service Failed because the control process exited with error code. See "systemctl status Nginx.service" and "journalctl -xe" for details.

这时候你需要重载systemd的配置列表:

  1. systemctl daemon-reload

你可以执行以下命令,来确认你的服务是否已经加入到配置列表:

  1. # 这个是列举所有已经存在配置文件对应的服务状态列表
  2. systemctl list-unit-files | grep Nginx
  3. # 列举出具有加载状态的服务列表(或者理解为最近被使用的服务)
  4. systemctl --all | grep Nginx

服务操作

如果习惯了使用 service 指令,可以继续使用:

  1. service Nginx start
  2. service Nginx stop
  3. service Nginx reload
  4. service Nginx restart
  5. service Nginx status

和过去不同,现在不再需要在 /etc/init.d 目录下添加一个服务脚本了。

但实际上Ubuntu的Wiki上推荐改用:

  1. systemctl start Nginx
  2. systemctl start Nginx.service
  3. systemctl stop Nginx
  4. systemctl reload Nginx
  5. systemctl restart Nginx
  6. systemctl status Nginx

不过 systemctl包括 service )执行以后,是没有任何特别提示,除非碰到了错误信息,否则都是静默的,也许这是为了配合 bash 脚本的设计需求。

激活/禁用系统自启动服务

再次,要将一个服务激活为系统启动时的自启动服务,现在只要执行以下命令:

  1. systemctl enable Nginx.service
  2. systemctl enable Nginx

这样就正式激活了服务系统启动时的自启动。要禁用自启动,只要disable即可。

  1. systemctl disable Nginx.service
  2. systemctl disable Nginx

你可以执行以下的命令,来检查服务是否已经激活了自启动

  1. systemctl is-enabled Nginx
  2. # enabled/disabled

检查一个服务是否启动:

  1. systemctl is-active Nginx
  2. # active/inactive

关于 /etc/init 目录

这个目录,其实未必真的需要添加进一个相关的控制进程启动的配置文件,这里添加文件,和具体的服务启动没有具体的关联性,新版本的 service 配置文件,实际上已经明确了启动服务所需的必要服务和之后加载的服务。

/etc/init 目录下存放的,可以理解为一个综合性启动的脚本配置,他支持配置文件中,使用bash代码块,比如:

  1. # Nginx
  2.  
  3. description "Nginx http daemon"
  4. author "George Shammas <georgyo@gmail.com>"
  5.  
  6. start on (filesystem and net-device-up IFACE!=lo)
  7. stop on runlevel [!2345]
  8.  
  9. env DAEMON=/usr/sbin/Nginx
  10. env PID=/var/run/Nginx.pid
  11.  
  12. expect fork
  13. respawn
  14. respawn limit 10 5
  15. #oom never
  16.  
  17. pre-start script
  18. $DAEMON -t
  19. if [ $? -ne 0 ]
  20. then exit $?
  21. fi
  22. end script
  23.  
  24. exec $DAEMON

可以理解为,对过去的启动脚本更简化版的一个启动配置文件,使用这个配置文件控制启动,还是使用 systemd 自行控制服务作为自启动,这个交给使用者去权衡吧。

这篇文章算是对这两天的知识点的一个总结吧。

猜你在找的Ubuntu相关文章