ubuntu使用systemd设置开机启动
ubuntu使用systemd设置开机启动
在项目过程中,经常会碰到需要设置开机启动脚本,以下将介绍使用systemd的方法设置开机启动。
确认systemd是否安装
systemd是一个跟随开发板的系统预装工具,用来管理软件启动和停止,一般来说ubuntu16以及以上的版本基本都有这个预装工具。如果系统已经预装了systemd,那么就可以用它来管理进程,反之如果没有,即使安装了,也不会被默认配置为系统管理工具。
可以用如下指令查询系统是否使用systemd工具:
systemd --version
如果系统返回了类似如下的信息,表明该系统是由systemd来管理软件的:
systemd 245 (245.4-4ubuntu3.11)
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid
设置开机自启动
为了使用systemd, 我们需要在 /etc/systemd/system 中添加后缀为 .service 的配置文件
例如我们需要运行如下的脚本文件 /home/nvidia/autostart.sh:
#! /bin/bash
sleep 10
killall python3
cd /opt/nvidia/deepstream/deepstream-5.0/source/deepstream_python_apps/apps/ds-usb-imagemeta
/usr/bin/python3 deepstream_imagemeta-multistream.py /dev/video0 &
配置文件可以这样写(autostart.service):
[Unit]
Description=python_detection
Documentation=
After=network.target
Wants=
Requires=
[Service]
ExecStart=/home/nvidia/autostart.sh
ExecStop=
ExecReload=/home/nvidia/autostart.sh
Type=forking
[Install]
WantedBy=multi-user.target
使用如下命令测试autostart.service是否能够正常运行:
sudo systemctl start autostart.service
使用如下命令查看程序输出:
sudo journalctl -f -u autostart.service
如果能够正常运行,设置开机启动:
sudo systemctl enable autostart.service
service配置文件简单解析
参考:牧野星辰:https://www.cnblogs.com/downey-blog/p/10473939.html
在上面的配置文件中,为了演示起见,我将一些本测试脚本不需要但是比较重要的配置项也写了出来,其实如果不需要可以删除,但是[Unit]/[Service]/[Install]这三个标签需要保留。
我们来一个个简单介绍一下配置项:
Description:运行软件描述
Documentation:软件的文档
After:因为软件的启动通常依赖于其他软件,这里是指定在哪个服务被启动之后再启动,设置优先级
Wants:弱依赖于某个服务,目标服务的运行状态可以影响到本软件但不会决定本软件运行状态
Requires:强依赖某个服务,目标服务的状态可以决定本软件运行。
ExecStart:执行命令
ExecStop:停止执行命令
ExecReload:重启时的命令
Type:软件运行方式,默认为simple
WantedBy:这里相当于设置软件,选择运行在linux的哪个运行级别,只是在systemd中不在有运行级别概念,但是这里权当这么理解。
TIPS: 如果不能成功运行,尝试把Type改成forking.
以上就是使用systemd设置开机启动的方法,如果大家对于该方法还有什么疑问,或者发现有什么错误,欢迎留言讨论!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)