一、systemd使用
1. 创建 systemd 服务文件
创建一个新的 systemd 服务文件,websocket.service
为服务名
sudo vim /etc/systemd/system/websocket.service
[Unit]
Description=WebSocket Service
After=network.target
[Service]
ExecStart=/home/li/websocket/websocket
WorkingDirectory=/home/li/websocket
User=root
Restart=on-failure
[Install]
WantedBy=multi-user.target
确保 ExecStart
指向可执行文件路径, User
设置为运行该服务的用户。(如果程序需要root权限才能运行,可以把User设为root)
2. 重新加载 systemd 配置
创建或修改服务文件后,需要重新加载 systemd 配置以使更改生效
sudo systemctl daemon-reload
3. 启用并启动服务
启用服务以使其在启动时自动运行
sudo systemctl enable websocket.service
启动服务:
sudo systemctl start websocket.service
4. 检查服务状态
检查服务的运行状态以确保它正确启动:
sudo systemctl status websocket.service
5.停止并禁用服务
停止:
sudo systemctl stop websocket.service
禁用:
sudo systemctl disable websocket.service
6.查看日志
sudo journalctl -u websocket.service
二、可能遇到的问题
1、程序退出太快
服务的启动脚本或程序崩溃或退出得太快,导致 systemd 尝试多次重新启动服务并最终失败
Stopped websocket.service - WebSocket Service.
websocket.service: Start request repeated too quickly.
websocket.service: Failed with result 'exit-code'.
Failed to start websocket.service - WebSocket Service.
可以通过添加 RestartSec 参数设置重新启动之间的延迟时间。
[Unit]
Description=WebSocket Service
After=network.target
[Service]
ExecStart=/home/li/websocket/websocket
WorkingDirectory=/home/li/websocket
User=root
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
2、程序运行时需要链接动态库
error while loading shared libraries: libmywslib.so: cannot open shared ...
2.1 设置 LD_LIBRARY_PATH
[Service]
ExecStart=/home/li/websocket/websocket
WorkingDirectory=/home/li/websocket
Environment="LD_LIBRARY_PATH=/path/library"
User=root
Restart=always
RestartSec=10
2.2 更新系统的库路径
将库路径添加到系统库路径中:
创建一个新的配置文件(例如 /etc/ld.so.conf.d/mywslib.conf
)
/path/library
然后运行 ldconfig
更新系统的库缓存
sudo ldconfig
标签:Systemd,websocket,Service,service,sudo,systemd,li,自启,开机
From: https://www.cnblogs.com/LiBlog--/p/18306990