简介
本文档介绍如何为init.d或Systemd for EFM(边缘雾处理模块)创建服务文件。
先决条件
要求
Cisco建议您应具备Linux知识。
使用的组件
本文档不限于特定的软件和硬件版本。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
配置
EFM安装软件包不包含init.d或Systemd的即装即用服务文件。
在这里可以找到创建服务文件的简单示例。
对于init.d
[root@cen7 ~]# cat /etc/init.d/efm
#!/bin/bash
# EFM init script.
EFM_HOME="/opt/cisco/kinetic/efm_server"
EFM_USER="EFM"
case "$1" in
'start')
echo "Starting EFM as $EFM_USER"
sleep 2
su -c "$EFM_HOME/bin/daemon.sh start" $EFM_USER
;;
'stop')
echo "Stopping EFM as $EFM_USER"
su -c "$EFM_HOME/bin/daemon.sh stop" $EFM_USER
;;
*)
# usage
echo "usage: $0 start|stop"
exit 1
;;
esac
确保调整环境变量以匹配您的环境:EFM_HOME和EFM_USER。
创建文件后,请确保将其标记为可执行文件。
对于系统Md
[root@cen7 ~]# cat /etc/systemd/system/efm.service
[Unit]
Description=EFM
After=network.target
[Service]
Type=forking
User=EFM
WorkingDirectory=/opt/cisco/kinetic/efm_server/
ExecStart=/opt/cisco/kinetic/efm_server/bin/daemon.sh start
Restart=no
GuessMainPID=yes
[Install]
WantedBy=multi-user.target
确保调整配置变量以匹配您的环境:User=。
创建服务文件后,请确保更新systemd中的守护程序文件:
[root@cen7 ~]# systemctl daemon-reload
验证
要验证脚本/服务文件是否按预期工作,您可以尝试启动和停止服务:
对于init.d
[root@cen7 ~]# /etc/init.d/efm start
Starting EFM as EFM
DSA Version: 1.1.2
DGLux5 Build: r7914
DGLux Server Build: 1230
Verifying Environment...
Verifying Configuration...
Server Started. (pid: 3790)
...
[root@cen7 ~]# /etc/init.d/efm stop
Stopping EFM as EFM
Server Stopped.
对于系统Md
[root@cen7 ~]# systemctl start efm
[root@cen7 ~]#
[root@cen7 ~]# systemctl status efm
● efm.service - EFM
Loaded: loaded (/etc/systemd/system/efm.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2018-04-23 17:01:22 CEST; 4s ago
Process: 5725 ExecStart=/opt/cisco/kinetic/efm_server/bin/daemon.sh start (code=exited, status=0/SUCCESS)
Main PID: 5737 (dart)
CGroup: /system.slice/efm.service
├─5737 /opt/cisco/kinetic/dart-sdk/bin/dart --old_gen_heap_size=16 --new_gen_semi_max_size=2 /opt/cisco/kinetic/efm_server/bin/server_watcher.dart --log-file=logs/dglux_server.log --manager-port...
├─5746 /opt/cisco/kinetic/dart-sdk/bin/dart -Ddglux.server.watcher=true -Ddslink.runtime.manager=true -Ddglux.server.log=/opt/cisco/kinetic/efm_server/logs/dglux_server.log --old_gen_heap_size=1...
├─5785 java -classpath /opt/cisco/kinetic/efm_server/dslinks/Alarms/lib/dslink-0.18.3.jar:/opt/cisco/kinetic/efm_server/dslinks/Alarms/lib/jcommander-1.48.jar:/opt/cisco/kinetic/efm_server/dslin...
├─5788 /opt/cisco/kinetic/dart-sdk/bin/dart bin/run.dart --name DQL --log info --broker http://127.0.0.1:35294/conn --token DpKbOMophIePrJvdGpXyt1H0RpcM8g8hkPXyDqaEIVwIQLzF
├─5794 java -classpath /opt/cisco/kinetic/efm_server/dslinks/H2_DB/lib/jcommander-1.48.jar:/opt/cisco/kinetic/efm_server/dslinks/H2_DB/lib/commons-dbcp2-2.1.1.jar:/opt/cisco/kinetic/efm_server/d...
├─5801 /opt/cisco/kinetic/dart-sdk/bin/dart run.dart --name dataflow --broker http://127.0.0.1:35294/conn --token nkH3JEA12v82GthaCsb9IfAL0iMWJNaYtiuRA7ruB28T7jdf
├─5803 /opt/cisco/kinetic/dart-sdk/bin/dart bin/run.dart --name System --linux_use_free_command true --offset_memory_disk_cache true --broker http://127.0.0.1:35294/conn --token OSkQvkA3diq3OLtw...
└─5826 java -d64 -Djava.library.path=/opt/cisco/kinetic/efm_server/dslinks/parstream-dsa-link/lib/centos7 -classpath lib/bcprov-jdk15on-1.51.jar:lib/cisco-parstream-jdbc-5.0.0.jar:lib/commons-cs...
Apr 23 17:01:22 cen7 systemd[1]: Starting EFM...
Apr 23 17:01:22 cen7 daemon.sh[5725]: DSA Version: 1.1.2
Apr 23 17:01:22 cen7 daemon.sh[5725]: DGLux5 Build: r7914
Apr 23 17:01:22 cen7 daemon.sh[5725]: DGLux Server Build: 1230
Apr 23 17:01:22 cen7 daemon.sh[5725]: Verifying Environment...
Apr 23 17:01:22 cen7 daemon.sh[5725]: Verifying Configuration...
Apr 23 17:01:22 cen7 daemon.sh[5725]: Server Started. (pid: 5737)
Apr 23 17:01:22 cen7 systemd[1]: Started EFM.
[root@cen7 ~]#
[root@cen7 ~]# systemctl stop efm
如您所见,EFM进程在服务文件中定义的用户下启动,并且在请求它停止服务之后所有进程都将清除。
故障排除
如果遇到要启动的问题,请检查以下项:
- init.d或Systemd服务文件中的可配置参数(用户、路径)
- 对于SystemD:systemctl status efm的输出
- journalctl —unit=efm的输出