init 和 systemd:Linux守护进程

现代 Linux 都采用 systemd 来作为守护进程,例如在 Ubuntu 18.04 上它们都指向同一个 systemd,

$ ll /sbin/init 
/sbin/init -> /lib/systemd/systemd*$ ll /bin/systemd
/bin/systemd -> /lib/systemd/systemd*

而 init 和 systemd 的区别如下,

initsystemd 都是 Linux 的 init 守护进程,但最好使用后者,因为它在现代的 Linux 发行版中很常用。init 使用 service,而 systemd 用 systemctl 管理 Linux 服务。

init 守护进程是 Linux 内核执行的第一个进程,它的进程 ID (PID) 始终为 1。它的目的是初始化、管理和跟踪系统服务和守护进程。换句话说,init 守护进程是系统上所有进程的父进程。

要创建一个服务,需要编写 shell 脚本,并存储在 /etc/init.d/ 目录下,通过 service 命令启动、停止、重新启动服务。例如如下的 /etc/init.d/myservice 脚本,

#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....
 
# Source function library.
. /etc/init.d/functions
 
start() {
    # TODO: code to start app comes here 
}
 
stop() {
    # TODO: code to stop app comes here 
}
 
case "$1" in 
    start)
       start
       ;;
    stop)
       stop
       ;;
    restart)
       stop
       start
       ;;
    status)
       # TODO: code to check status of app comes here 
       ;;
    *)
       echo "Usage: $0 {start|stop|restart|status}"
esac
 
exit 0

systemd(system daemon)是现代的 Linux 系统所使用的守护进程(pid 也为 1),其功能更加强大。要编写 systemd 服务,需要在 /etc/systemd/system/ 目录下编写一个 .service 文件。

有了 .service 文件之后,可以通过 systemctl 命令来启动、停止、重新启动服务。

以下为一个 myservice.service 文件的样例,

[Unit]
Description=Some Description
Requires=syslog.target
After=syslog.target
 
[Service]
ExecStart=/usr/sbin/<command-to-start>
ExecStop=/usr/sbin/<command-to-stop>
 
[Install]
WantedBy=multi-user.target

 

Over.

 

 

posted @ 2023-03-12 17:09  Anonymous596  阅读(547)  评论(0编辑  收藏  举报