1.进入/usr/lib/systemd/system目录,编辑xx.service文件如下:

[Unit]
Description=dvs app Compatibility
After=multi-user.target systemd-update-utmp-runlevel.service

[Service]
Type=simple
ExecStart=/home/app/start.sh

StandardOutput=tty
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

并赋予执行权限

chmod 777 xx.service

[Unit] 启动顺序与依赖关系

Description:当前服务的简单描述
Documentation:指定 man 文档位置

After:如果 network.target 或 sshd-keygen.service 需要启动,那么 sshd.service 应该在它们之后启动
Before:定义 sshd 应该在哪些服务之前启动
注意:After 和 Before 字段只涉及启动顺序,不涉及依赖关系。

Wants:表示 sshd.service 与 sshd-keygen.service 之间存在"弱依赖"关系,
Requires:表示"强依赖"关系,即如果该服务启动失败或异常退出,那么sshd.service 也必须退出
注意:Wants 字段与 Requires 字段只涉及依赖关系,与启动顺序无关,默认情况下是同时启动。

2.进入/home/app目录,编译需要上电自启动的脚本程序,如vi start.sh

#!/bin/sh            
. /etc/profile                                
set -e                                               
echo "z1" >> /home/app/test.txt
dmesg -C                                                  
echo "z2" >> /home/app/test.txt                         
#prepare                       
echo "z3" >> /home/app/test.txt                       
/usr/local/bin/init.sh --na                                                                             

并给脚本赋予执行权限

chmod 777 start.sh

EnvironmentFile:许多软件都有自己的环境参数文件,该字段指定文件路径
注意:/etc/profile 或者 /etc/profile.d/ 这些文件中配置的环境变量仅对通过 pam 登录的用户生效,而 systemd 是不读这些配置的。
systemd 是所有进程的父进程或祖先进程,它的环境变量会被所有的子进程所继承,如果需要给 systemd 配置默认参数可以在 /etc/systemd/system.conf  和 /etc/systemd/user.conf 中设置。
加载优先级 system.conf 最低,可能会被其他的覆盖。


Type:定义启动类型。可设置:simple,exec,forking,oneshot,dbus,notify,idle
simple(设置了 ExecStart= 但未设置 BusName= 时的默认值):ExecStart 字段启动的进程为该服务的主进程
forking:ExecStart 字段的命令将以 fork() 方式启动,此时父进程将会退出,子进程将成为主进程


ExecStart:定义启动进程时执行的命令
上面的例子中,启动 sshd 执行的命令是 /usr/sbin/sshd -D $OPTIONS,其中的变量 $OPTIONS 就来自 EnvironmentFile 字段指定的环境参数文件。类似的,还有如下字段:
ExecReload:重启服务时执行的命令
ExecStop:停止服务时执行的命令
ExecStartPre:启动服务之前执行的命令
ExecStartPost:启动服务之后执行的命令
ExecStopPost:停止服务之后执行的命令


RemainAfterExit:设为yes,表示进程退出以后,服务仍然保持执行


KillMode:定义 Systemd 如何停止服务,可以设置的值如下:
control-group(默认值):当前控制组里面的所有子进程,都会被杀掉
process:只杀主进程
mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
none:没有进程会被杀掉,只是执行服务的 stop 命令


Restart:定义了退出后,Systemd 的重启方式。可以设置的值如下:
no(默认值):退出后不会重启
on-success:只有正常退出时(退出状态码为0),才会重启
on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启
on-abnormal:只有被信号终止和超时,才会重启
on-abort:只有在收到没有捕捉到的信号终止时,才会重启
on-watchdog:超时退出,才会重启
always:不管是什么退出原因,总是重启


RestartSec:表示 Systemd 重启服务之前,需要等待的秒数

复制代码

3.使能xx.service

# systemctl enable dvs.service
Created symlink from /etc/systemd/system/multi-user.target.wants/dvs.service to /etc/systemd/system/dvs.service.

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐