惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
The GitHub Blog
The GitHub Blog
F
Fortinet All Blogs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Cisco Talos Blog
Cisco Talos Blog
P
Privacy & Cybersecurity Law Blog
I
Intezer
Y
Y Combinator Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
N
Netflix TechBlog - Medium
The Hacker News
The Hacker News
AWS News Blog
AWS News Blog
aimingoo的专栏
aimingoo的专栏
A
About on SuperTechFans
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Stack Overflow Blog
Stack Overflow Blog
Hacker News: Ask HN
Hacker News: Ask HN
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
B
Blog
T
Tor Project blog
C
Cybersecurity and Infrastructure Security Agency CISA
云风的 BLOG
云风的 BLOG
博客园_首页
V2EX - 技术
V2EX - 技术
T
Threat Research - Cisco Blogs
腾讯CDC
宝玉的分享
宝玉的分享
博客园 - 叶小钗
罗磊的独立博客
S
Securelist
The Last Watchdog
The Last Watchdog
Google Online Security Blog
Google Online Security Blog
Scott Helme
Scott Helme
博客园 - 司徒正美
W
WeLiveSecurity
有赞技术团队
有赞技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
Secure Thoughts
NISL@THU
NISL@THU
N
News and Events Feed by Topic
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
雷峰网
雷峰网
大猫的无限游戏
大猫的无限游戏
K
Kaspersky official blog
IT之家
IT之家

博客园 - 海乐学习

Java Maven 开发的常用命令 C语言开发的常用命令 三汇Linux配置Config说明 Java实现优雅的关闭程序并执行清理流程的写法 C语言开发中优雅的关闭程序并执行清理流程的写法 ZeroMQ的DEALER双帧结构(路由空帧 + 业务帧)(支持异步收发、主动推送事件)C写服务端 java写客户端 ZeroMQ中ZMQ_DEALER单帧数据(支持异步收发、主动推送事件)C写服务端 java写客户端 win10系统中 关闭专注助手 执行 xx.sh 脚本文件时出现: /bin/bash^M:解释器错误: 没有那个文件或目录 运行编译打包好的 xxx.jar 中没有主清单属性 出现这个错误 将Java编译的 .jar文件做成 麒麟系统的服务(Systemd 标准服务,Linux 通用) 实现开机自启动 将Java编译的 .jar文件做成windows服务 实现开机自启动 方法二 RabbitMQ在麒麟系统中离线安装说明 VMware启动虚似机后出现 无法获取快照信息: 锁定文件失败 模块“Snapshot”启动失败。未能启动虚拟机。 C语言在Linux中开发完整Demo包含读配置文件写日志和定时器Timer C语言在Linux中开发读取配置文件app.conf 麒麟V10 Server系统中搭建C语言开发环境 麒麟ServerV10 修改IP4地址 麒麟ServerV10 配置IP4 当系统中有两个版本的Maven时,用IDEA创建Maven有时会出错 麒麟ServerV10安装 espeak-ng 和 ffmpeg 方法 C语言在Linux中开发没有界面纯后台运行的Demo程序(含日志和Timer) C语言在Linux中开发使用定时器Timer在界面上显示时间 C语言在Linux中开发带界面的程序(含每小时日志) C语言在Linux中开发第一个项目Hello Word 在apache-maven项目中使用log4写日志 在apache-maven项目中解决中文乱码问题 在apache-maven项目中读取配置文件 创建apache-maven项目 远程桌面连接时出现身份验证错误 要求的函数不受支持 这可能是由于CredSSP加密数据库修正 win10系统查看电脑从锁屏状态回到使用状态 apache-maven的常用命令 C语言在 Linux 中的常用命令 apache-maven安装配置 麒麟CentOS下安装ZeroMQ开发包 Window上用VS Code + Remote-SSH组件的方式来实现开发编译Linux上的C++程序 win10弹出 无法使用内置管理员账户打开 Microsoft Edge。请使用其他账户登录 在麒麟系统上安装Qwen3-TTS文字转语音 在麒麟系统上安装MaryTTS文字转语音 FTP上传Linux/Unix文件系统权限的修改方法 麒麟系统Kylin Linux Advanced Server 中安装 python3.10 将exe做成windows服务 java实现ftp上传 java实现TTS文字转语音wav (Jacob + SAPI) node.js和Next.js 编译部署说明
将C语言开发的程序做成 麒麟系统的服务(Systemd 标准服务,Linux 通用) 实现开机自启动
海乐学习 · 2026-06-17 · via 博客园 - 海乐学习

银河麒麟系统(Systemd 标准服务,Linux 通用)

1、路径约定

工程在这个目录下 

/opt/ShPbxServer/

image

2、在麒麟系统中编译

将编写好的工程代码全部上传到麒麟系统中

在windows上创建一个编译文件  Makefile ,没有扩展名。填入下面代码

我的工程名为 ShPbxServer

我的工程所用到的文件 

SRCS = ShPbxServer.c Logger.c ZeroMQServer.c ShBoard.c ShMemRecord.c ZeroMQAudioPush.c

下面是完整代码

# ============================================================================
# Makefile - ShPbxServer
# ============================================================================

CC = gcc
CXX = g++
# 添加宽字符支持和 GNU 扩展
CFLAGS = -Wall -O2 -D_XOPEN_SOURCE_EXTENDED -D_GNU_SOURCE
# 使用 ncursesw (wide character) 库支持中文
# LDFLAGS = -lpthread -lshpa3 -lncursesw -lstdc++ -lzmq  #带图形界面的不用了
LDFLAGS = -lpthread -lshpa3 -lstdc++ -lzmq

TARGET = ShPbxServer
SRCS = ShPbxServer.c Logger.c ZeroMQServer.c ShBoard.c ShMemRecord.c ZeroMQAudioPush.c
OBJS = $(SRCS:.c=.o)

.PHONY: all clean

all: $(TARGET)

$(TARGET): $(OBJS)
    $(CC) $(CFLAGS) -o $(TARGET) $(OBJS) $(LDFLAGS)

%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@

clean:
    rm -f $(OBJS) $(TARGET)

# 安装到系统目录 (可选)
install: $(TARGET)
    cp $(TARGET) /usr/local/bin/

# 卸载 (可选)
uninstall:
    rm -f /usr/local/bin/$(TARGET)

写好后一起上传到麒麟系统中的工程目录中  /opt/ShPbxServer/

image

执行  清理且编译 命令

其它常用命令

#前台运行命令    Ctrl+C 则退出 或 关闭终端
./ShPbxServer

#后台运行命令(生产环境)关闭终端 程序仍然运行
nohup ./ShPbxServer > /dev/null 2>&1 &

#先查看进程状态
# 查看进程状态
ps aux | grep ShPbxServer
#
pgrep -a ShPbxServer

#优雅关闭进程
# 优雅停止(会触发 handle_signal → 执行 ExitSys() 清理资源)
kill <PID>
# 或按名称停止
pkill ShPbxServer

3、编译好后开始准备制作服务

在windows上创建安装服务文件 install-shpbxserver-service.sh   填入下面代码

注意:工程名目录,工程名ShPbxServer,服务名shpbxserver  这些要更换

#!/bin/bash

APP_PATH="/opt/ShPbxServer/ShPbxServer"
SERVICE_FILE="/etc/systemd/system/shpbxserver.service"

cat > $SERVICE_FILE << EOF
[Unit]
Description=ShPbxServer
After=network.target

[Service]
User=root
WorkingDirectory=/opt/ShPbxServer
ExecStart=$APP_PATH
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable shpbxserver
systemctl start shpbxserver

echo "Install service success!"
systemctl status shpbxserver

在windows上创建卸载服务文件 uninstall-shpbxserver-service.sh  填入下面代码

#!/bin/bash

systemctl stop shpbxserver
systemctl disable shpbxserver
rm -f /etc/systemd/system/shpbxserver.service
systemctl daemon-reload

echo "Uninstall service success!"

将这两个文件都上传到麒麟系统的工程目录中  /opt/ShPbxServer/

安装服务(按顺序逐一执行)

#1、去掉换行符
sed -i 's/\r$//' install-shpbxserver-service.sh
#2、赋予权限 
chmod +x install-shpbxserver-service.sh
#3、安装
./install-shpbxserver-service.sh

卸载服务 (按顺序逐一执行)

#1、去掉换行符
sed -i 's/\r$//' uninstall-shpbxserver-service.sh
#2、赋予权限
chmod +x uninstall-shpbxserver-service.sh
#3、安装
./uninstall-shpbxserver-service.sh

其他常用命令

#重载系统服务配置
systemctl daemon-reload
#设置开机自启
systemctl enable shpbxserver
#立即启动服务
systemctl start shpbxserver

systemctl status shpbxserver    #查看运行状态
systemctl stop shpbxserver    #停止
systemctl restart shpbxserver  #重启
journalctl -u shpbxserver -f    #实时查看日志

# 精简输出,只展示运行中的服务(推荐日常排查)
systemctl --type=service --state=running
#查看所有已加载服务(含运行 / 停止 / 异常失败)
systemctl list-units --type=service --all

running说明这个服务在运行

image

4、常见问题

执行 ./install-shpbxserver-service.sh 时如果出现下面的错误

-bash: ./install-service.sh:/bin/bash^M:解释器错误: 没有那个文件或目录

错误原因:

在 Windows 里编辑过这个 .sh 脚本,导致换行符变成了 Windows 格式, Linux 不认识,所以报错 

^M 就是 Windows 换行符,Linux 识别不了。

解决方法:

在麒麟系统里,进入 .sh 脚本目录,执行:

#去掉换行符
sed -i 's/\r$//' install-shpbxserver-service.sh

再重新执行安装即可