linux(七)linux的服务管理(2)

简介: 4:手动添加systemctl 服务。为什么要手动添加systemctl服务呢?正常来说,nginx是使用yum或者apt-get来安装的。这种安装方式会将服务自动波添加至systemctl。但是,我要是编译安装的nginx,我就需要手动将nginx添加到systemctl中才可以使用systemctl命令来启动nginx。

4:手动添加systemctl 服务。

为什么要手动添加systemctl服务呢?正常来说,nginx是使用yum或者apt-get来安装的。这种安装方式会将服务自动波添加至systemctl。但是,我要是编译安装的nginx,我就需要手动将nginx添加到systemctl中才可以使用systemctl命令来启动nginx。

那么如何手动将编译的nginx添加至systemctl呢?

我们先去systemctl目录找到nginx的系统服务文件,直接手写可能是要求有点高,照着改一份不就完了嘛。

nginx.service:

ini

复制代码

[Unit]
# 服务的简单描述
Description=A high performance web server and a reverse proxy server
# 服务文档
Documentation=man:nginx(8)
# Before、After:定义启动顺序。Before=xxx.service,代表本服务在xxx.service启动之前启动。After=xxx.service,代表本服务在xxx.service之后启动。
After=network.target
[Service]
# Type=simple(默认值):systemd认为该服务将立即启动。服务进程不会fork。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型。
# Type=forking:systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便systemd能够跟踪服务的主进程。
# Type=oneshot:这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。
# Type=notify:与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。
# Type=dbus:若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。
# Type=idle: systemd会等待所有任务(Jobs)处理完成后,才开始执行idle类型的单元。除此之外,其他行为和Type=simple 类似。
Type=forking
# pid文件路径
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
# 指定启动单元的命令或者脚本,ExecStartPre和ExecStartPost节指定在ExecStart之前或者之后用户自定义执行的脚本。Type=oneshot允许指定多个希望顺序执行的用户自定义命令。
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
# 指定单元停止时执行的命令或者脚本。
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
# 指定单元停止时执行的命令或者脚本。
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
#
TimeoutStopSec=5
#
KillMode=mixed
[Install]
# WantedBy字段:表示该服务所在的 Target。
WantedBy=multi-user.target

 

以上大概是nginx.service的文件内容,以及相关字段的注解。

 

下边我们自己来尝试一下,创建一个test.sh文件,然后为test.sh文件注册一个系统服务。

test.sh

bash

复制代码

#!/bin/bash
echo "i love u" > /home/camellia/a.txt

testsh.service

ini

复制代码

[Unit]
Description=test.sh Service
[Service]
Type=forking
User=camellia
ExecStart=/home/camellia/test.sh
[Install]
WantedBy=multi-user.target

 

然后执行重载systemctl服务文件命令:

复制代码

sudo systemctl daemon-reload

然后再执行:

sql

复制代码

systemctl start testsh.service

我们打开/home/camellia/a.txt文件,如下图所示:

image.png

 5:一些常用的systemctl命令

(1):系统命令

重启系统

复制代码

sudo systemctl reboot

 

关闭系统,切断电源

复制代码

sudo systemctl poweroff

 

CPU停止工作

复制代码

sudo systemctl halt

 

暂停系统

bash

复制代码

sudo systemctl suspend

 

让系统进入冬眠状态

复制代码

sudo systemctl hibernate

 

让系统进入交互式休眠状态

perl

复制代码

sudo systemctl hybrid-sleep

 

启动进入救援状态(单用户状态)

ruby

复制代码

sudo systemctl rescue

 

设置主机名。

arduino

复制代码

sudo hostnamectl set-hostname rhel7

 

显示当前主机的信息

复制代码

hostnamectl

 

设置主机名。

arduino

复制代码

sudo hostnamectl set-hostname rhel7

 

查看当前运行的所有服务:

复制代码

systemctl list-units

 

查看服务是否开机启动:

复制代码

systemctl list-unit-files

这个命令比较有意思,详细说一下。在系统中执行这个命令,如下图所示:

image.png

State表示服务当前的启动状态,vendor preset表示服务默认的启动状态(是否开机自启)

其中Enabled表明服务正在运行;Disabled表明服务当前没有运行;Masked表示服务不会被运行,除非我们手动移除这个标志;Static表示服务只有在别的服务或单元需要它时才被使用。

主要是,我们可以使用这个命令来管理服务器上边自启的软件。这个很重要

目录
相关文章
|
4月前
|
Linux
在Linux中,怎么把脚本添加到系统服务里,即用 service 来调用?
在Linux中,怎么把脚本添加到系统服务里,即用 service 来调用?
|
1月前
|
Linux 应用服务中间件 Shell
linux系统服务二!
本文详细介绍了Linux系统的启动流程,包括CentOS 7的具体启动步骤,从BIOS自检到加载内核、启动systemd程序等。同时,文章还对比了CentOS 6和CentOS 7的启动流程,分析了启动过程中的耗时情况。接着,文章讲解了Linux的运行级别及其管理命令,systemd的基本概念、优势及常用命令,并提供了自定义systemd启动文件的示例。最后,文章介绍了单用户模式和救援模式的使用方法,包括如何找回忘记的密码和修复启动故障。
45 5
linux系统服务二!
|
1月前
|
Linux 应用服务中间件 Shell
linux系统服务!!!
本文详细介绍了Linux系统(以CentOS7为例)的启动流程,包括BIOS自检、读取MBR信息、加载Grub菜单、加载内核及驱动程序、启动systemd程序加载必要文件等五个主要步骤。同时,文章还对比了CentOS6和CentOS7的启动流程图,并分析了启动流程的耗时。此外,文中还讲解了Linux的运行级别、systemd的基本概念及其优势,以及如何使用systemd管理服务。最后,文章提供了单用户模式和救援模式的实战案例,帮助读者理解如何在系统启动出现问题时进行修复。
47 3
linux系统服务!!!
|
1月前
|
Linux 数据库
Linux服务如何实现服务器重启后的服务延迟自启动?
【10月更文挑战第25天】Linux服务如何实现服务器重启后的服务延迟自启动?
250 3
|
1月前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
110 3
|
2月前
|
Ubuntu Linux 网络安全
Linux中服务管理问题
【10月更文挑战第4天】
29 2
|
2月前
|
应用服务中间件 Linux Shell
Linux 配置 Nginx 服务的详细步骤,绝对干货
Linux 配置 Nginx 服务的详细步骤,绝对干货
92 0
|
3月前
|
NoSQL Linux Redis
Linux Redis 服务设置开机自启动
【9月更文挑战第2天】在 Linux 系统中,可使用两种方法设置 Redis 开机自启动:一是通过创建 `redis.service` 文件并利用 systemd 进行管理,包括定义服务参数和启动脚本;二是编辑 `/etc/rc.local` 文件,在其中添加启动命令。推荐使用 systemd 方法,因为它更符合现代 Linux 系统的设计理念。设置完成后,可通过 `sudo systemctl status redis.service` 检查服务状态。
522 3
|
3月前
|
编解码 Linux 开发工具
Linux平台x86_64|aarch64架构RTMP推送|轻量级RTSP服务模块集成说明
支持x64_64架构、aarch64架构(需要glibc-2.21及以上版本的Linux系统, 需要libX11.so.6, 需要GLib–2.0, 需安装 libstdc++.so.6.0.21、GLIBCXX_3.4.21、 CXXABI_1.3.9)。
|
4月前
|
Ubuntu Linux 测试技术
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?