在Linux和Unix-like系统中,通过命令行安装服务是系统管理中的常见操作,不同发行版使用的工具和方法有所不同,但核心逻辑都是将服务程序配置为系统服务,实现开机自启、状态管理和启停控制,以下将以主流的Systemd(CentOS 7+、Ubuntu 16.04+等)和SysVinit(CentOS 6及更早版本)为例,详细讲解命令行安装服务的流程,并辅以实例说明。

使用Systemd安装服务(现代Linux主流方式)
Systemd是目前大多数现代Linux发行版使用的初始化系统和服务管理器,其配置文件遵循.service单元文件规范,安装服务的核心步骤包括编写服务单元文件、放置到指定目录、启用并启动服务。
创建服务单元文件
服务单元文件通常以.service为后缀,存放在/etc/systemd/system/目录下(推荐,优先级高于/usr/lib/systemd/system/),文件内容包含[Unit]、[Service]、[Install]三个主要段落,为自定义脚本/usr/local/bin/myapp.sh创建服务myapp.service如下:
[Unit] Description=My Custom Application Service After=network.target [Service] Type=simple ExecStart=/usr/local/bin/myapp.sh Restart=on-failure RestartSec=5s User=root Group=root [Install] WantedBy=multi-user.target
- [Unit]段:定义服务的基本信息,如
Description为服务描述,After表示服务依赖的网络目标。 - [Service]段:核心配置,
ExecStart指定启动命令,Restart定义失败后自动重启策略,User/Group指定运行用户和组。 - [Install]段:定义安装行为,
WantedBy=multi-user.target表示在多用户模式下启用服务。
放置文件并设置权限
将创建的.service文件保存到/etc/systemd/system/目录,并确保可执行权限(虽然服务本身不需要执行权限,但文件需对systemd可读):
sudo cp myapp.service /etc/systemd/system/ sudo systemctl daemon-reload # 重新加载systemd配置,使其识别新服务
启用并启动服务
- 启动服务(立即运行,但不开机自启):
sudo systemctl start myapp.service
- 启用服务(设置开机自启):
sudo systemctl enable myapp.service
- 检查服务状态:
systemctl status myapp.service # 查看运行状态、日志等信息
常用管理命令
| 命令 | 功能 |
|---|---|
systemctl stop myapp.service |
停止服务 |
systemctl restart myapp.service |
重启服务 |
systemctl reload myapp.service |
重新加载配置(如支持) |
systemctl is-enabled myapp.service |
检查服务是否开机自启 |
journalctl -u myapp.service -f |
实时查看服务日志 |
使用SysVinit安装服务(传统Linux方式)
对于使用SysVinit的旧版系统(如CentOS 6),服务通过脚本管理,脚本通常存放在/etc/init.d/目录,通过chkconfig命令管理开机自启。

创建服务脚本
在/etc/init.d/目录下创建服务脚本,例如myapp,需包含start、stop、restart、status等操作函数,示例脚本如下:
#!/bin/bash
# chkconfig: 35 80 20
# description: My Custom Application Service
APP_PATH="/usr/local/bin/myapp.sh"
PID_FILE="/var/run/myapp.pid"
start() {
if [ -f $PID_FILE ]; then
echo "Service already running"
else
echo "Starting service..."
$APP_PATH &
echo $! > $PID_FILE
fi
}
stop() {
if [ -f $PID_FILE ]; then
echo "Stopping service..."
kill $(cat $PID_FILE)
rm -f $PID_FILE
else
echo "Service not running"
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
if [ -f $PID_FILE ]; then
echo "Service running with PID $(cat $PID_FILE)"
else
echo "Service not running"
fi
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
- 脚件首行
#!/bin/bash声明解释器,chkconfig行定义运行级别(35)和启动(80)、停止(20)优先级。
设置脚本权限并添加到服务管理
sudo chmod +x /etc/init.d/myapp # 添加可执行权限 sudo chkconfig --add myapp # 将服务添加到chkconfig管理 sudo chkconfig myapp on # 设置开机自启(运行级别3和5)
常用管理命令
| 命令 | 功能 |
|---|---|
service myapp start |
启动服务 |
service myapp stop |
停止服务 |
service myapp restart |
重启服务 |
service myapp status |
查看服务状态 |
chkconfig --list myapp |
查看服务在各运行级别的自启状态 |
注意事项
- 依赖管理:确保服务依赖的其他服务(如数据库、网络)已正确配置,通过
[Unit]段的After和Requires字段管理依赖。 - 日志配置:服务日志可通过
[Service]段的StandardOutput和StandardError重定向到文件,或使用journalctl查看。 - 权限控制:避免使用
root用户运行服务,尽量通过User和Group字段指定低权限用户,减少安全风险。 - 测试验证:服务安装后需测试启动、停止、开机自启等场景,确保功能正常。
相关问答FAQs
Q1: 如何查看服务的详细日志信息?
A: 对于Systemd管理的服务,使用journalctl -u 服务名 -f命令实时查看日志,或journalctl -u 服务名 --no-pager查看历史日志;对于SysVinit服务,可通过/var/log/目录下的日志文件(如/var/log/messages)或脚本中配置的日志路径查看。
Q2: 服务启动失败时如何排查问题?
A: 首先通过systemctl status 服务名或service 服务名 status查看状态和错误提示;其次检查服务单元文件或脚本的语法是否正确(如路径错误、权限不足);然后查看系统日志(journalctl或/var/log/)定位具体错误原因;最后确认服务依赖的资源(如端口、文件、其他服务)是否就绪。

