Linux系统服务(systemctl)的使用

系统 Linux
常驻系统内存中的进程且可以提供一些系统和网络功能;现在最新的Linux系统都统一使用systemctl进行服务的管理。

[[350492]]

服务:常驻系统内存中的进程且可以提供一些系统和网络功能;现在最新的Linux系统都统一使用systemctl进行服务的管理。

1、运行级别的分类 runlevel

> 运行级别0:系统停机状态

> 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆

> 运行级别2:多用户状态(没有NFS)

> 运行级别3:完全的多用户状态(有NFS)

> 运行级别4:系统未使用,保留

> 运行级别5:X11控制台

> 运行级别6:系统正常关闭并重启

2、管理服务 systemctl (root权限)

> systemctl [opt] xxx.service

> status 查看当前服务状态

> start 启动服务

> stop 关闭服务

> restart 重启服务

> enable 设置开机启动

> disable 设置开机不启动

> reload 后面不接具体服务名,重新加载配置文件

> mask 注销服务

> unmask 取消注销

3.一些常用命令 systemctl

  • 查看当前已经启动的服务 systemctl list-units
  • 查看所有服务 systemctl list-unit-files
  • 查看服务有哪些依赖 systemctl list-dependencies xx.service
  • 查看服务有哪些依赖(反向) systemctl list-dependencies --reverse xx.service

4.system 服务相关的一些目录( Centos 环境,Debian 类的环境可能会有稍许不同)

/usr/lib/systemd/system/ 系统安装的软件默认启动脚本目录

/etc/systemd/system/ 用户根据自己需要建立的启动脚本目录

/etc/sysconfig/ 服务初始化选项目录

/var/lib/ 服务运行时产生的数据存储目录

/etc/xxx/ 各服务配置目录

5.结合一个例子来具体讲解,一台机开启两个ssh服务

我们最常使用的ssh服务,系统默认ssh服务22端口,我现在想再开一个ssh服务,端口8888

1.系统服务启动脚本 /usr/lib/systemd/system/sshd.service,将其复制到 /etc/systemd/system/ 下,并改名为 sshd2.service,文件内容如下

  1. [Unit] 
  2.  Description=OpenSSH server daemon 
  3.  Documentation=man:sshd(8) man:sshd_config(5) 
  4.  After=network.target sshd-keygen.service 
  5.  Wants=sshd-keygen.service 
  6.  
  7.  [Service] 
  8.  Type=notify 
  9.  EnvironmentFile=/etc/sysconfig/sshd 
  10.  ExecStart=/usr/sbin/sshd -D $OPTIONS 
  11.  ExecReload=/bin/kill -HUP $MAINPID 
  12.  KillMode=process 
  13.  Restart=on-failure 
  14.  RestartSec=42s 
  15.   
  16.  [Install] 
  17.  WantedBy=multi-user.target 

因为要重启一个新的服务,所以要修改一下ExecStart这一行,读取新的配置文件 sshd2_config,改为

 

  1. ExecStart=/usr/sbin/sshd -D $OPTIONS -f /etc/ssh/sshd2_config 

2.到 /etc/ssh/ 下,将 sshd_config 复制到 sshd2_config,并修改端口那一行

 

  1. Port 8888 

3.运行命令 systemctl reload 重新加载一下配置

4.运行命令 systemctl status sshd2.service 查看状态

5 运行命令 systemctl start sshd2.service 开启服务

6.运行命令 systemctl enable sshd2.service 设置开机启动

7.在另一台机器上登录 ssh fancy@ip -p8888 就可以登录了

  • 注意1,防火墙要打开8888端口
  • 注意2,官方建议用户自己新建的服务脚本最好存放在 /etc/systemd/system/ 目录下,实际情况下存放在系统服务目录 /usr/lib/systemd/system/ 下也是没有问题的,看个人选择了

6、我们再来举个例子,做一个自己的服务

1.在 /root/bin/ 下创建一个shell脚本 fancy_test.sh,并修改其权限,chmod u+x fancy_test.sh,内容如下

  1. #!/bin/bash 
  2. logdate=$(date +%s) 
  3. logdir="/root/log/" 
  4. logname=fancy.${logdate}.log 
  5. #echo $logname 
  6. touch ${logdir}${logname} 

意思是,运行该服务时,在 /root/log/ 目录下创建一个日志文件

2.在 /etc/systemd/system/ 下创建启动脚本 fancy_test.service,输入一下内容

  1. [Unit] 
  2. Description=fancy_test server daemon 
  3.  
  4. [Service] 
  5. Type=simple 
  6. ExecStart=/root/bin/fancy_test.sh 
  7.   
  8. [Install] 
  9. WantedBy=multi-user.target 

3.运行命令 systemctl reload

4.运行命令 systemctl start fancy_test.service

5.此时你会看到在 /root/log/ 目录下创建了一个日志文件

  • 注意,我们这个是最简单的服务,执行几个命令而已,所以没有配置文件,也不会常驻内存,运行一次就结束 

 

责任编辑:庞桂玉 来源: 良许Linux
相关推荐

2021-01-31 10:48:24

命令Systemctl工具

2021-03-17 07:29:15

Systemctl 管理Linux

2018-11-19 09:50:51

Linux命令操作系统

2015-07-31 10:20:13

Linux命令完全指南

2023-08-14 10:02:46

命令Linux

2023-12-08 12:04:32

命令Linux骨灰级

2010-02-23 17:14:25

Ubuntu Linu

2010-08-03 15:37:43

Linux NFS服务

2011-04-21 17:29:13

Linuxgssftp

2011-01-14 17:21:37

Linuxcron

2011-01-14 17:24:09

2009-12-17 17:19:45

Linux系统

2009-12-22 10:46:35

2011-01-14 17:05:52

Linuxinit

2011-01-14 17:21:37

Linuxsyslogd

2019-03-28 08:44:31

Linux系统服务方法

2021-06-29 10:50:40

Linux.NET命令

2010-01-12 16:05:53

Linux Mono

2009-07-03 18:27:03

redhatlinux安全使用

2022-09-14 09:18:52

SubversionLinux系统
点赞
收藏

51CTO技术栈公众号