Как сделать так, чтобы программа на с++, в Linux, исполняла утилито-подобное поведение?

То есть. Программа должна себя вести как например утилита gcc, утилита cmake, make, apt-get и тп вещи.

(1) То есть, как сделать так чтобы программа запускалась из любой папки Linux?

И дополнительно:

(2) Как сделать так чтобы программа запускалась со старта операционной системы Linux, и продолжала исполнение в виде некой сервисной службы(к примеру)?


Ответы (1 шт):

Автор решения: KoVadim

Если система построена на базе systemd (а это большинство современных систем), то сделать "свой сервис" очень легко. Заходим в каталог /etc/systemd/system/ и создаем текстовый файл с расширением .service.

Теперь открываем его и наполняем

[Unit]
Description="красивое имя"
After=network.target ; запускаемся после того, как сеть поднялась
After=nginx.service ; и например, nginx

[Service]
Type=exec
WorkingDirectory=<рабочий каталог, если нужен>
User=BBName ; имя пользователя, может быть важно
ExecStart=<собственно путь к бинарнику с параметрами>

[Install]
WantedBy=multi-user.target

все (в угловых скобках пропишите нужное, сами уголовые скобки не нужны). теперь сервис будет перезапускаться ( systemctl start имя.service), его статус можно посмотреть через systemctl status имя.service ( с логами!). Его система даже перезапускать будет.

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

p.s. инструкции утверждают, что свои скрипты лучше размещать в каталоге /etc/systemd/user/ Но у меня на убунтах оно лежит в /etc/systemd/system, возможно это и неверно, но оно работает.

→ Ссылка