编译安装程序后启动服务

162 阅读3分钟

Centos7及以上系统编译安装后如何启动服务

[root@localhost system]# vim /usr/lib/systemd/system/sshd.service [Unit]                                  #unit段(单元段)
Description=OpenSSH server daemon       # 描述信息
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service#表示在运行该程序之前运行network.target sshd-                                                keygen.service
Wants=sshd-keygen.service               #表示sshd.service与sshd-keygen.service之间存在"弱依                                           赖"关系,即如果"sshd-keygen.service"启动失败或停止运                                           行,不影响sshd.service继续执行。[Service]                               #service段(服务段)
Type=notify                             # 在启动完成后会发送一个通知消息。还需要配合 NotifyAccess                                           来让 Systemd 接收消息
EnvironmentFile=/etc/sysconfig/sshd     # 环境配置文件路径为/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS    # 指明启动unit要运行命令或脚本的绝对路径
ExecReload=/bin/kill -HUP $MAINPID      #特殊的环境变量 $MAINPID 可用于表示主进程的PID
KillMode=process                        #这里process表示通过只杀主进程来停止服务
Restart=on-failure                      #当服务单元文件中设置了智能重启,当设定Restart=1 时,则当                                         次daemon服务意外终止后,会再次自动启动此服务
RestartSec=42s                          #重启服务前暂停42秒(如果为指定单位将以秒(s)为单位[Install]                               #install段(开机启动)
WantedBy=multi-user.target              #这里表示被multi-user.target所弱依赖,必须先运行混合模式                                         才能运行本程序# 其他选项及注释参考以下内容!

[Unit]段的常用选项:

  • Description:描述信息
  • After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反
  • Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活
  • Wants:依赖到的其它units,弱依赖
  • Conflicts:定义units间的冲突关系

[service]段

  • Type:定义影响ExecStart及相关参数的功能的unit进程启动类型
  1. simple:默认值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻于内存中
  2. forking:由ExecStart启动的程序透过spawns延伸出其他子程序来作为此daemon的主要服务。原生父程序在启动结束后就会终止
  3. oneshot:与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中
  4. dbus:与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作.因此通常也要同时设定BusNname= 才行
  5. notify:在启动完成后会发送一个通知消息。还需要配合 NotifyAccess 来让 Systemd 接收消息
  6. idle:与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务
Type=notify                             
  • EnvironmentFile:环境配置文件
EnvironmentFile=/etc/sysconfig/sshd
  • ExecStart:指明启动unit要运行命令或脚本的绝对路径
ExecStart=/usr/sbin/sshd -D $OPTIONS
  • ExecStartPre: ExecStart前运行
  • ExecStartPost: ExecStart后运行
  • ExecStop:指明停止unit要运行的命令或脚本
  • Restart:当设定Restart=1 时,则当次daemon服务意外终止后,会再次自动启动此服务
Restart字段含义
no(默认值)退出后不会重启
on-success只有正常退出时(退出状态码为0),才会重启
on-failure非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启
on-abnormal只有被信号终止和超时,才会重启
on-abort只有在收到没有捕捉到的信号终止时,才会重启
on-watchdog超时退出,才会重启
always不管是什么退出原因,总是重启
Restart=on-failure  
  • RestartSec: 设置在重启服务( Restart= )前暂停多长时间。 默认值是100毫秒(100ms)。 如果未指定时间单位,那么将视为以秒为单位。 例如设为"20"等价于设为"20s"。
RestartSec=42s      
  • PrivateTmp:设定为yes时,会在生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/目录
  • KillMode字段含义
    control-group(默认值)当前控制组里面的所有子进程,都会被杀掉
    process只杀主进程
    mixed主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
    none没有进程会被杀掉,只是执行服务的 stop 命令

[install]段:选择启动的运行级别

Install段的常用选项:

Alias:别名,可使用systemctl command Alias.service

RequiredBy:被哪些units所依赖,强依赖

WantedBy:被哪些units所依赖,弱依赖

WantedBy=multi-user.target  

Also:安装本服务的时候还要安装别的相关服务

实验

cd /opt
wget https://nginx.org/download/nginx-1.25.4.tar.gz         #下载nginx包
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl-devel#依赖包,编译软件
tar zxvf nginx-1.25.4.tar.gz                                #解压nginx包
cd nginx-1.25.4                                             #进入nginx文件夹
./configure --prefix=/usr/local/nginx                       #指定安装路径
​
make && make install                                        #编译安装
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/          #做软链接
​
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
​
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s TERM $MAINPID[Install]
WantedBy=multi-user.target
​
wq                                                          #保存退出
systemctl daemon-reload                                     #重新加载配置
systemctl start nginx                                       #启动nginx服务
systemctl status nginx                                      #查看nginx服务状态
systemctl stop nginx                                        #关闭nginx服务
systemctl status nginx                                      #查看nginx服务状态

centos6及以前版本编译安装后如何启动服务

chkconfig

chkconfig工具:

格式:

chkconfig --list [服务名称]

chkconfig --add 服务名称

chkconfig --level 级别列表服务名on/off

实验2

cd /opt
wget https://nginx.org/download/nginx-1.25.4.tar.gz         #下载nginx包
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl-devel#依赖包,编译软件
tar zxvf nginx-1.25.4.tar.gz -C /opt                        #解压nginx包
cd nginx-1.25.4                                             #进入nginx文件夹
./configure --prefix=/usr/local/nginx                       #指定安装路径
​
make && make install                                        #编译安装
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/          #这步可以不做,做软链接,让系统可以                                                             直接使用
​
vim /etc/init.d/nginx                                       #写脚本#!/bin/bash 
#chkconfig: - 99 20 
#description:Nginx Service Control Script 
PROG="/usr/local/nginx/sbin/nginx" 
PIDF="/usr/local/nginx/logs/nginx.pid"case "$1" in
start) $PROG 
;; 
stop) 
kill -s QUIT $(cat $PIDF) 
;; 
restart) 
$0 stop $0 start
;; 
reload) 
kill -s HUP $(cat $PIDF) 
;;
*) echo "Usage: $0 {start|stop|restart|reload}" 
exit 1 
esac 
exit 0
​
:wq                                                         #保存退出chmod +x /etc/init.d/nginx                                  #给脚本加上权限
nginx                                                       #开启nginx
ss -ntap |grep nginx                                        #查看服务有没有启动
​
chkconfig --add nginx                                       #将服务加入让chkconfig管理
chkconfig --list  nginx                                     #查看服务
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。 
​
      要列出 systemd 服务,请执行 'systemctl list-unit-files'。
      查看在具体 target 启用的服务请执行
      'systemctl list-dependencies [target]'。
​
nginx           0:关 1:关 2:关 3:关 4:关 5:关 6:关
​
chkconfig --level 35 nginx on                               #开启3和5自动开启
chkconfig --list  nginx                                     #查看服务
[root@localhost nginx-1.25.4]# chkconfig --list nginx
​
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。 
​
      要列出 systemd 服务,请执行 'systemctl list-unit-files'。
      查看在具体 target 启用的服务请执行
      'systemctl list-dependencies [target]'。
​
nginx           0:关 1:关 2:关 3:开 4:关 5:开 6:关
​
cat /usr/local/nginx/logs/nginx.pid                         #查看nginx进程号,便于停止
7128                                                        #进程号