Это не черная магия, но достаточно близко
В последнее время я связался с несколькими компаниями, чтобы спросить, не ищут ли они новых стажеров этим летом. Я еще не получил степень CS, но я хочу почувствовать реальный мир за пределами университета. Одна из этих компаний попросила меня создать и развернуть небольшой RESTful API.
Создать API было достаточно просто - ничего, с чем не смог бы справиться амбициозный студент. Закончив полировку конечного продукта, я загрузил исходный код своего API через SFPT на сервер, где хотел его развернуть. Затем я SSH сказал сервер и запустил API, и это сработало! Но как только я вышел из сервера, API остановился. Я не мог поддерживать сеанс SSH с сервером 24 часа в сутки, пока компания не проверила мой API. Мне нужен был API для автономной работы на сервере.
Мне нужно было высвободить демона.
Хотя высвобождение демона звучит фантастично и захватывающе, я с сожалением должен вам сообщить, что на самом деле это совсем наоборот. Демоны (или службы), с которыми мы собираемся бороться здесь, - это просто фоновые процессы, которые запускаются сами по себе без взаимодействия с пользователем. Однако я не преувеличу, если скажу, что почувствовал себя убийцей демонов, когда мой API работал в фоновом режиме.
Если не считать шуток, создание демона - довольно простая задача, если вы знаете, что делаете. Пойдем прямо к делу!
Создание Сервиса
Все службы расположены в /etc/systemd/system, так как они зависят от библиотек, предлагаемых systemd для правильной работы. Чтобы создать службу, мы должны создать файл .service в этом каталоге, что можно сделать с помощью этой команды:
$ sudo nano /etc/systemd/system/mydaemon.service
mydaemon должно быть именем вашего демона. Теперь давайте заполним файл .service следующим:
[Unit] Description=My first daemon! [Service] User=<yourUser> #Code to execute #Can be the path to an executable or code itself WorkingDirectory=/home/ubuntu/mydaemon ExecStart=/home/ubuntu/mydaemon/executable Type=simple TimeoutStopSec=10 Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target
Не забудьте изменить <yourUser> на фактического пользователя на вашем сервере! Обратите внимание, как WorkingDirectory и ExecStart указывают на одну и ту же папку. Он должен оставаться таким, чтобы ваша служба работала правильно. В настоящий момент этого каталога не существует. Давайте создадим это!
Создание сценария Bash для службы
Во-первых, давайте создадим каталог для нашего исполняемого файла. Это каталог, указанный в WorkingDirectory:
$ mkdir mydaemon
Теперь войдем в каталог и создадим наш исполняемый файл!
$ cd mydaemon $ sudo nano executable
Исполняемый файл должен содержать следующий заголовок:
#!/bin/sh
В противном случае он не будет работать как сценарий bash. Внутри этого файла напишите инструкции по запуску вашего сервиса. В моем случае, когда я развертывал приложение Java, мой исполняемый файл выглядел так:
#!/bin/sh java -jar myAppi.jar
Теперь очень важно предоставить исполняемому файлу правильные разрешения. Права доступа к файлу определяют, кто может читать, писать и выполнять этот файл. Поскольку службы запускаются операционной системой в фоновом режиме, мы должны предоставить разрешения на чтение и выполнение «другим пользователям». Это можно сделать с помощью следующей команды:
$ sudo chmod 005 executable
Теперь осталось только вызвать нашего Демона!
Запуск службы
В отличие от вызова настоящего демона, это можно легко сделать с помощью следующих команд:
$ sudo systemctl daemon-reload $ sudo systemctl enablemydaemon$ sudo systemctl startmydaemon
И после этого ваш сервис должен быть запущен! Вы можете проверить статус вашей службы с помощью:
$ sudo systemctl status mydaemon
Если с вашей службой что-то не так, вы можете попробовать отладить ее с помощью журналов службы, к которым можно получить доступ:
$ sudo journalctl --unit=mydaemon
Последние мысли
Службы являются ключом к развертыванию приложений на сервере, и я надеюсь, что это руководство позволит вам раскрыть ваши демоны и успешно развернуть свои приложения.
Удачного вызова!
Спасибо за чтение.