【Orangepi3 LTS】开机进入系统后自动加载程序并放入后台的方法

找了好多博文,大多数的都是在rc.local中修改,之前试了下,可以在开机时自动加载,程序中如果反复多从申请释放资源可能会造成无法登入系统等情况。
下面是开机进入系统后自动加载程序并放入后台的方法描述:
1.在/etc/systemd/system/目录下新建一个自定义的.service文件,比如myprogram.service。
2.在该文件中添加以下内容:

[Unit]
Description=My Program
After=network.target

[Service]
Type=simple
ExecStart=/path/to/myprogram
Restart=always

[Install]
WantedBy=multi-user.target

其中,Description为该程序的描述信息,After表示该服务依赖于network.target服务,在网络启动后才启动该服务。Type为该服务的类型,simple表示该服务不是一个守护进程,即该服务运行的进程就是程序本身。ExecStart为要运行的程序路径,Restart表示该服务在运行出错时自动重启。WantedBy为该服务所属的target,multi-user.target表示该服务在多用户模式下运行。
3.保存该文件后,使用以下命令启用该服务:

sudo systemctl enable myprogram.service

4.然后使用以下命令启动该服务:

sudo systemctl start myprogram.service

这样,在下一次开机后,该程序就会自动加载并运行在后台。可以使用以下命令来查看该服务的状态:

sudo systemctl status myprogram.service

5.如果想要停止该服务,可以使用以下命令:

sudo systemctl stop myprogram.service

6.如果想要禁用该服务,可以使用以下命令:

sudo systemctl disable myprogram.service

一些解释:
1.“after=”是systemd unit文件中的一个选项,用于定义一个单位(unit)在另一个单位(unit)之后启动。它指定了一个或多个启动此单位的其他单位的名称列表,使得当这些单位已经启动并运行时,此单位才会启动。

例如,如果我们想要确保某个服务在网络服务启动之后再启动,我们可以在该服务的unit文件中使用 “after=network.target”。这告诉systemd等待网络服务启动后再启动此服务。

另一个例子是使用“ after=multi-user.target”,它可以确保该服务在系统启动完全完成之后再启动。

此外,还可以使用 “Wants= ”或 “Requires=” 配合 “after= 选项”,以便当依赖的服务启动时,同时启动当前服务。

总之,“after=” 选项用于定义启动顺序,确保某些服务在其他服务之后启动。

2.在systemd服务单元配置文件中,Type用于指定系统如何对待服务的运行状态。Type的取值包括以下几种:

simple:默认值。该类型的服务认为自己一直运行,如果服务退出,则认为服务失败。
forking:该类型的服务在启动时会fork一个子进程来执行主进程。主进程结束后,systemd认为服务已经停止运行。
oneshot:该类型的服务会在启动时运行一次,运行完毕后就退出。如果服务在执行过程中发生错误,systemd会认为服务启动失败。
dbus:该类型的服务是一个DBus服务,需要在BusName字段中指定DBus名称。在服务启动时,systemd会尝试注册DBus名称,如果注册成功则认为服务启动成功,否则认为服务启动失败。
notify:该类型的服务在启动后会发送一个信号给systemd来表示服务已经启动。在服务执行过程中,如果需要告知systemd当前服务的运行状态,则可以向systemd发送一个自定义信号来通知它。通常情况下,这种服务类型用于需要实现启动后自检或预热的服务。
idle:该类型的服务会在所有其他类型的服务都已经启动之后再启动。通常情况下,这种服务类型用于实现后台进程或者定时任务等需要等待其他服务启动完成后才能运行的任务。
需要注意的是,不同的Type类型会影响服务的启动和运行方式,因此在选择服务类型时需要根据实际需求进行选择。

3.在 systemd 的服务配置文件中,Restart 字段用于定义当服务异常终止时如何重新启动该服务。

其值可以为以下选项之一:

no:表示不重新启动服务,默认值。
always:表示无论服务正常或异常终止,总是重新启动服务。
on-success:表示服务在正常退出时重新启动。
on-failure:表示服务在异常终止时重新启动。
on-abnormal:表示服务在收到异常信号时重新启动。
on-watchdog:表示服务在启用监视器时重新启动。
on-abort:表示服务在收到 SIGABRT 信号时重新启动。

4.“[Install] WantedBy=” 用于指定 systemd 启动单元的依赖关系,表示哪些启动单元依赖于当前单元。

具体来说,“WantedBy=” 中指定了一个或多个目标单元,表示当前单元应该在哪些目标单元之前启动。当目标单元启动时,系统会自动启动当前单元。如果目标单元停止运行,当前单元也会被停止。

常见的目标单元包括:

multi-user.target: 多用户模式目标单元,通常用于服务器环境;
graphical.target: 图形化模式目标单元,通常用于桌面环境;
network.target: 网络服务目标单元,通常用于需要网络支持的服务。

通常情况下,一个服务单元只需要设置一个 WantedBy=,但也可以指定多个,以逗号分隔。例如,WantedBy=multi-user.target,graphical.target 表示该服务单元既依赖于多用户模式目标单元,又依赖于图形化模式目标单元。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迷糊的鱼(。・ω・。)ノ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值