Ubuntu: как написать простейший сервис |
![]() |
Добавил(а) microsin |
Служба в Linux (иногда их называют "демон") это программа, которая обычно автоматически стартует при запуске системы скриптами, находящимися в каталоге /etc/init.d. Фактически это обычная программа, в которой просто добавлен функционал для запуска, остановки и перезапуска сервиса. В этой статье описывается создание простейшего сервиса Ubuntu, который умеет только запускаться и останавливаться. Процесс по шагам, на примере создания сервиса myfirstservice: 1. Создайте папку myfirstservice, перейдите в её каталог. Имя каталога может быть любым, здесь каталог myfirstservice указан только для примера: $ mkdir myfirstservice $ cd myfirstservice 2. Создайте в папке myfirstservice файл main.c со следующим содержимым: #include < stdio.h> 3. Скомпилируйте эту программу: $ gcc -o myfirstservice main.c
В результате получится бинарный файл myfirstservice, это и есть исполняемый файл для нашей службы. 4. Создайте скрипт для запуска нашего сервиса, и дайте ему произвольное имя, например myfirstservice_svc: #!/bin/sh Самое важное в этом скрипте это строка, где скрипт с помощью утилиты awk [3] вычисляет PID службы. В зависимости от версии операционной системы эта строка может отличаться. Различия зависят от реализации команды ps, как она формирует вывод таблицы процессов. Например, на маршрутизаторе Realtek, где работает операционная система Linux на основе ядра 5.10.70, эта строка может быть такой: pid=`ps | awk '{if (match($5, ".*/myfirstservice$") || $5 == "myfirstservice") print $1}'`
Могут быть и другие отличия, которые потребуют адаптации скрипта под конкретный шелл. Например, проверка $pid может быть следующей: if test "$pid" == "" 5. Сделайте копию исполняемого файла myfirstservice в каталог, где находятся утилиты, которые можно запустить без указания полного пути (этот каталог прописан в переменную окружения $PATH). Например, это может быть каталог /usr/sbin: $ chmod +x myfirstservice $ sudo cp myfirstservice /usr/sbin 6. Сделайте файл скрипта myfirstservice_svc исполняемым, и поместите его в каталог /etc/init.d. $ chmod +x myfirstservice_svc $ sudo cp myfirstservice_svc /etc/init.d/ Готово! После перезагрузки служба myfirstservice автоматически запустится, и будет висеть в памяти. Проверить это можно командой ps -aux: $ ps -aux | grep /usr/sbin | grep myfirstservice usernam+ 833778 0.0 0.0 2780 1408 pts/5 S 11:04 0:00 /usr/sbin/myfirstservice Также с помощью скрипта myfirstservice_svc командами stop, start и restart вы сможете останавливать, запускать и перезапускать службу myfirstservice: $ /etc/init.d/myfirstservice_svc stop Stopping myfirstservice service PID: 833778 myfirstservice was stopped $ /etc/init.d/myfirstservice_svc start Starting myfirstservice service *** myfirstservice *** $ /etc/init.d/myfirstservice_svc restart Restarting myfirstservice service Stopping myfirstservice service PID: 843035 Starting myfirstservice service myfirstservice was stopped *** myfirstservice *** Команда service. Команда service --status-all позволяет просмотреть статус всех служб. Интересующую нас службу можно отфильтровать командой grep: $ service --status-all | grep myfirstservice [ ? ] myfirstservice_svc [Ссылки] 1. How to Start, Stop or Restart Services in Ubuntu site:vitux.com. |