systemctl
是 Linux 系统中用于控制系统服务(service)和目标(target)的命令行工具。它是 systemd
初始化系统的一部分,广泛应用于现代 Linux 发行版中,如 Ubuntu、CentOS、Fedora 等。
systemd
是一个系统和服务管理器,它负责在系统启动时初始化所有必要的服务和进程。而 systemctl
则是与 systemd
交互的主要工具,用于管理服务、单元文件以及目标。
systemd
使用单元文件来定义系统中的各种资源和服务。这些单元文件通常位于以下目录:
/etc/systemd/system/
:用户自定义的服务单元文件。/lib/systemd/system/
:系统默认的服务单元文件。每个服务都有对应的 .service
文件,例如 Apache 的服务文件可能是 apache2.service
或 httpd.service
。
以下是 systemctl
的一些常用命令及其功能:
systemctl status <service_name>
示例:
systemctl status sshd
该命令会显示服务的当前状态,包括是否正在运行、最后一次启动时间等信息。
systemctl start <service_name>
示例:
systemctl start apache2
该命令用于启动指定的服务。
systemctl stop <service_name>
示例:
systemctl stop mysql
该命令用于停止正在运行的服务。
systemctl restart <service_name>
示例:
systemctl restart nginx
当需要重新加载配置文件或更新服务时使用此命令。
systemctl reload <service_name>
示例:
systemctl reload php-fpm
如果服务支持热重载,可以使用此命令重新加载配置文件而不中断服务。
systemctl enable <service_name>
示例:
systemctl enable docker
该命令会在系统启动时自动启动指定的服务。
systemctl disable <service_name>
示例:
systemctl disable redis
该命令会禁用服务的开机自启功能。
systemctl is-enabled <service_name>
示例:
systemctl is-enabled crond
返回 enabled
表示已启用开机自启,返回 disabled
表示未启用。
systemctl list-units --type=service
该命令列出系统中所有正在运行的服务。
systemctl list-unit-files
该命令列出系统中所有的单元文件,包括服务、套接字、设备等。
假设我们需要创建一个简单的 Python 脚本作为服务进行管理,以下是具体步骤:
创建一个名为 myapp.py
的 Python 脚本:
#!/usr/bin/env python3
import time
while True:
with open("/tmp/myapp.log", "a") as f:
f.write("Service is running at {}\n".format(time.ctime()))
time.sleep(10)
赋予脚本可执行权限:
chmod +x /path/to/myapp.py
在 /etc/systemd/system/
目录下创建一个名为 myapp.service
的文件:
[Unit]
Description=My Custom Python Application
After=network.target
[Service]
ExecStart=/path/to/myapp.py
Restart=always
User=root
[Install]
WantedBy=multi-user.target
重新加载 systemd
配置以识别新服务:
systemctl daemon-reload
启动服务:
systemctl start myapp
设置开机自启:
systemctl enable myapp
检查服务状态:
systemctl status myapp
如果不再需要该服务,可以停止并禁用它:
systemctl stop myapp
systemctl disable myapp
systemd
使用目标(target)来表示系统的不同状态或运行级别。常见的目标包括:
multi-user.target
:多用户模式,没有图形界面。graphical.target
:带有图形界面的多用户模式。rescue.target
:单用户救援模式。可以通过以下命令切换目标:
systemctl isolate <target_name>
systemd
提供了强大的日志管理工具 journalctl
,可以查看服务的日志:
journalctl -u <service_name>
例如:
journalctl -u myapp
systemd
支持服务之间的依赖关系,可以在单元文件中通过 Requires=
或 Wants=
来定义依赖。
systemctl
是 Linux 系统管理员不可或缺的工具,通过它可以轻松地管理和控制系统服务。无论是启动、停止还是配置服务,systemctl
都提供了简洁且强大的命令集。