服务,守护进程,初创......什么是正确的方法?


-1

我认为我有部分术语问题,部分只是普通的新问题,部分厌倦了阅读问题。

到目前为止,我已经完成了家庭能源监控项目,包括让我的SDR无线电工作,解码数据,将json推送到InfluxDB,运行Grafana并获取图表!所有通过谷歌搜索,因为我有不到2个月的Linux经验(只是玩Raspberry Pi / OrangePi。

我的OrangePi运行Armbian Ubuntu 16.04

我需要一个非常简单的“命令”来执行启动。它将一直在后台运行。所以我猜这是一个守护进程? 命令是

/home/jonboy545/GoCode/bin/rtlamr -filterid=62059972 -format=json -msgtype=idm unique=true | rtlamr-collect

而已。我创建了一个名为log_energy.sh的简单脚本,使其可执行。只是:

#!/bin/bashr
/home/jonboy545/GoCode/bin/rtlamr -filterid=62059972 -format=json -msgtype=idm unique=true | rtlamr-collect;

如果我在终端窗口中键入./log_energy.sh,一切都很好。我必须打开一个SCREEN实例,所以我可以拆开它,这样我就不必将终端打开了。显然这不是最好的解决方案。

那么,我把它放到rc.local中吗?我有一些问题,我认为它执行得太快,所以我试着在那里睡60,但它仍然是零星的。有时它有效,有时则没有。 所以我考虑使用crontab,让它执行@reboot。同样,可能不是最好的解决方案。还有必须声明的环境变量并在〜/ .profile中设置(我猜他们可以去任何地方)我不确定crontab“读取”那些环境变量,至少我读过的是这些。

那么什么是让这个脚本在启动时执行的“正确”方式(可能在最后,一旦所有内容都“稳定下来”)。

最终我想把它作为一个名为“energylog”的“服务”,所以我可以做一个sudo服务energylog启动/停止/重启。

我查看了/etc/init.d/skeleton以及/etc/init.d中的一些现有文件,但我不确定我在看什么。

有人能引导我朝着正确的方向前进吗?

非常感谢!

Answers:


3

我想部分问题是在启动时运行应用程序有几种方法。

一个 守护进程 就像旧的DOS TSR一样 - 它是一个在后台启动并运行的应用程序。

使用init脚本执行此操作的“经典”方法(编写起来往往有点复杂) - 但这些方法已经过时了,或者crontab - 实际上只是一次运行特定任务的东西。

服务 命令是指upstart,它处理init脚本所做的事情,但是使用16.04,它被systemd取代。它用于systemd,用于从upstart转换的人员,但它的值得用“systemctl”代替“service” - 它做同样的事情,甚至更多。

为systemd编写脚本。

为什么?它的支持,并将长期。它有一个非常明智的语法。文档实际上也相当不错。

还有必须声明的环境变量并在〜/ .profile中设置(我猜他们可以去任何地方)我不确定crontab“读取”那些环境变量,至少我读过的是这些。

按照 systemd docs (以及进一步阅读 - 这个AU问题 和Ubuntu的 文件

您可以使用类似的行添加包含环境变量的行

环境=“ONE = 1”'TWO = 2两'

您也可以在特定时间或特定时间启动它。您甚至可以自动重启它

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.