
























银河麒麟系统(Systemd 标准服务,Linux 通用)
工程在这个目录下
/opt/ShPbxServer/

将编写好的工程代码全部上传到麒麟系统中
在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/

执行 清理且编译 命令
其它常用命令
#前台运行命令 Ctrl+C 则退出 或 关闭终端 ./ShPbxServer #后台运行命令(生产环境)关闭终端 程序仍然运行 nohup ./ShPbxServer > /dev/null 2>&1 & #先查看进程状态 # 查看进程状态 ps aux | grep ShPbxServer # 或 pgrep -a ShPbxServer #优雅关闭进程 # 优雅停止(会触发 handle_signal → 执行 ExitSys() 清理资源) kill <PID> # 或按名称停止 pkill ShPbxServer
在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说明这个服务在运行

执行 ./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
再重新执行安装即可
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。