Служба, Демон, запуск ... Как правильно?

Я думаю, что у меня проблема с терминологией, часть просто проблема с newb, часть устала от проблемы чтения.

Я получил до сих пор на моем проекте монитора энергии дома, от получения моего SDR радио работает, декодирование данных, толкая json InfluxDB, работает Grafana и получать графики! Все через Google, поскольку у меня меньше 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 в окне терминала все работает отлично. Я должен открыть экземпляр экрана, поэтому я могу отсоединить его, чтобы мне не пришлось оставлять терминал открытым. Очевидно, это не лучшее решение.

Итак, я помещаю это в rc.местные? У меня были некоторые проблемы, я думаю, что он выполняется слишком рано, поэтому я попытался положить сон 60 там, но он все еще был спорадическим. Иногда это срабатывало, иногда нет.
Поэтому я подумал об использовании crontab и просто выполнить @reboot. Опять же, вероятно, не лучшее решение. Также есть переменные окружения, которые должны быть объявлены и находятся в ~/.профиль (я думаю, они могут пойти куда угодно), и я не уверен, что crontab "читает" эту среду переменные, по крайней мере, это то, что я читал.

Итак, каков "правильный" способ выполнения этого сценария при загрузке (возможно, в самом конце, как только все " успокоится."

в конечном счете, я хотел бы иметь его в качестве "службы" под названием "energylog", чтобы я мог сделать запуск/остановку/перезапуск службы sudo energylog.

Я посмотрел /etc / init.D / skeleton, а также некоторые уже существующие файлы в /etc/init.d но я не совсем уверен, на что я смотрю.

может кто-то направить меня в правильном направлении?

большое спасибо!

3
задан poor_red_neck
07.05.2023 4:53 Количество просмотров материала 3578
Распечатать страницу

1 ответ

Я думаю, часть проблемы есть/было несколько способов запустить приложение при запуске.

на daemon что - то вроде старой DOS TSRs-его приложение, которое запускается и работает в фоновом режиме.

"классические" способы сделать это с помощью сценария инициализации (который, как правило, немного сложнее писать) - но они были несколько устаревшими, или crontab - который буквально просто предназначен для выполнения конкретных задач за раз.

на сервис команда относится к upstart, который обрабатывает то, что init скрипты сделали, но с 16.04, его заменили systemd. Его используют для systemd для людей, переходящих от upstart, но его стоит заменить "service" на "systemctl" - что делает то же самое и многое другое.

напишите скрипт для systemd.

Почему? Его поддержали, и будет в долгосрочной перспективе. Его получил довольно разумный синтаксис. Документация также на самом деле довольно пристойный.

также есть переменные окружения, которые должны быть объявлены и находятся в ~/.профиль (я думаю, они могут пойти куда угодно), и я не уверен, что crontab "читает" эти переменные среды, по крайней мере, это то, что я прочитал.

на systemd docs (и для дальнейшего чтения - это AU вопрос, и Ubuntu документация)

вы можете добавить строку с окружающей средой переменные со строкой

среда= "один=один "'два=два два'

вы также можете запустить его как определенный пользователь, или в определенное время. Вы даже можете тривиально перезапустить его автоматически

3
отвечен Journeyman Geek 2023-05-08 12:41

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх