0%

Linux 创建自定义服务

Linux 创建自定义服务

Upstart Service

/etc/init.d/目录下新建service-name文件[1]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
service_name="service_name"
service_script_path="service_script_path"

start()
{
echo "$service_name service start"
chmod a+x $service_script_path && nohup ./$service_script_path
}

stop()
{
echo "$service_name service stop"
server_process_id=`ps -aux | grep $service_name | cut -d " " -f 6`
echo "server_process_id="server_process_id
kill -9 $server_process_id
}

case $1 in
start)
start
;;
stop)
stop
;;
restart)
echo "resert the $service_name"
stop
start
;;
*)
echo "undefine operation"
;;
esac

Systemd service[2]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true

[Install]
WantedBy=multi-user.target

[Unit]部分主要是对这个服务的说明,内容包括Description和After,Description用于描述服务,After用于描述服务类别。

[Service]部分是服务的关键,是服务的一些具体运行参数的设置:

  1. Type=forking 是后台运行的形式;

  2. PIDFile 为存放PID的文件路径;

  3. ExecStartPre 为服务启动命令前执行的命令;

  4. ExecStart 为服务的具体运行命令;

  5. ExecReload 为重启命令;

  6. ExecStop 为停止命令;

  7. PrivateTmp=True 表示给服务分配独立的临时空间。

    注意:[Service]部分的启动、重启、停止命令全部要求使用绝对路径,使用相对路径则会报错![3]

服务操作

启动服务

1
systemctl start <service-name>

停止服务

1
systemctl stop <service-name>

服务开机自动启动

1
systemctl enable <service-name>

服务取消开机启动

1
systemctl disable <service-name>

服务状态查看

1
systemctl status <service-name>

服务重启

1
systemctl reload <service-name>

Systemd相对init更简单,推荐使用Systemd[4][5]

参考


  1. Udstart 自定义服务模板 ↩︎

  2. Systemd 鸟哥私房菜教程 ↩︎

  3. Systemd 博客参考 ↩︎

  4. Upstart 与 Systemd ↩︎

  5. Systemd 替代 init ↩︎