Linux удаленный запуск службы

Запускаем Python-скрипт на сервере, чтобы он работал всё время

В итоге мы остановились на том, что научились запускать скрипт на сервере, чтобы он работал после разрыва соединения. Но это половинчатое решение: если мы перезапустим сервер, то бот остановится. Иногда сервер перезагружается сам на стороне провайдера, например при плановых технических работах. И тогда наши скрипты умирают.

Сейчас нам нужно такое решение, чтобы бот автоматически перезапускался при любых обстоятельствах. Этим и займёмся.

Коротко — суть

Чтобы было понятно, что тут происходит, вот короткая версия:

  1. Настраиваем удалённый доступ к серверу.
  2. Создаём папку и заливаем в неё скрипт, который в итоге должен будет работать всё время.
  3. Создаём у себя на компьютере файл службы — он управляет настройками автозапуска скрипта.
  4. Отправляем файл службы на сервер.
  5. Обновляем на сервере данные обо всех службах и запускаем нашу.

Теперь подробно про каждый шаг.

Предварительная работа

Основное, что мы будем использовать, — это удалённый доступ к серверу по SSH. Для этого он должен быть включён на самом сервере, и там же можно сразу посмотреть параметры доступа. Например, для работы нашего учебного сервера мы пользуемся услугами SpaceWeb, где доступ по SSH включается из панели управления:

Запускаем Python-скрипт на сервере, чтобы он работал всё время

Запускаем SSH и проверяем, что соединение устанавливается. Чтобы соединиться, нужно написать в терминале команду ssh имя_пользователя@адрес_сервера, после чего нажать Enter. Сервер спросит пароль, и, если мы его правильно ввели, нас пустят.

Запускаем Python-скрипт на сервере, чтобы он работал всё время

Мы видим приветствие сервера, значит, всё прошло хорошо и мы можем управлять им со своего компьютера. Для этого нужно будет писать в терминал команды и реагировать на то, что тебе ответит сервер.

Отправляем скрипт на сервер

Чтобы не захламлять корневую папку на сервере, создадим новую папку bot. Вот эта команда:

После этого открываем новую командную строку на компьютере, а не на сервере. Для этого нужно запустить ещё одно окно терминала. Там пишем такое:

scp /Users/mihailpolanin/Downloads/bot.py mpolyanin@77.222.61.9:bot

  • scp — копирование файла по SSH;
  • /Users/mihailpolanin/Downloads/bot.py — это путь к нашему скрипту на компьютере. Его замените на то, что будет у вас;
  • mpolyanin@77.222.61.9 — адрес сервера и логин пользователя. Это тоже замените на ваши данные;
  • : — отделяет сервер от папки;
  • bot — название папки, которую мы только что создали на сервере.

Лайфхак: чтобы не писать вручную пути до файлов на локальном компьютере, можно перед началом ввода пути просто перетащить файл в окно терминала. Терминал поймёт, что вы имели в виду «путь до этого файла», и подставит данные сам.

Читайте также:  Версии linux для безопасности

После запуска у нас попросят пароль от сервера — вводим его и видим статистику отправки файла:

Запускаем Python-скрипт на сервере, чтобы он работал всё время

Переключаемся обратно в SSH-соединение и проверяем, что файл скопировался и лежит в папке. Для этого вводим две команды: первая перейдёт в эту папку, а вторая покажет её содержимое:

Запускаем Python-скрипт на сервере, чтобы он работал всё время

Готовим файл для работы службы

Нам нужно, чтобы система сама следила за тем, чтобы скрипт работал всё время и запускался после перезагрузки. В Linux за это отвечают службы — одну из таких служб мы сейчас и сделаем.

Создаём на компьютере новый файл bot.service и вставляем туда такое:

[Unit] Description=tg-bot After=multi-user.target [Service] User=root Group=root Type=simple Restart=always ExecStart=/usr/bin/python3 /bot/bot.py [Install] WantedBy=multi-user.target

Два самых важных параметра — это путь к нашему скрипту (/bot/bot.py) и название службы: tg-bot. Название может быть любым, а вот путь к скрипту нужно указать точно.

Теперь закидываем этот файл на сервер в папку /usr/lib/systemd/system. Для этого в командной строке компьютера пишем:

scp /Users/mihailpolanin/Downloads/bot.service mpolyanin@77.222.61.9:/usr/lib/systemd/system

Как и раньше, не забудьте заменить адрес до файла .service на вашем компьютере, а также имя пользователя и адрес сервера. Первый адрес можно не писать вручную, а перетащить файл в терминал сразу после набора команды scp.

Запуск службы

Теперь нам нужно перезагрузить все службы, чтобы наш файл тоже попал в общий список для запуска. Открываем SSH-консоль и выполняем там такую команду:

sudo systemctl daemon-reload

И сразу включим наш сервис, чтобы он не отключался при перезагрузке сервера:

sudo systemctl enable bot.service

Всё, можно запускать наш телеграм-бот как службу. Вот основные команды для этого:

  • sudo systemctl start bot.service — запустить службу;
  • sudo systemctl stop bot.service — остановить службу;
  • sudo systemctl status bot.service — посмотреть статус, работает или нет.

Что дальше

В следующий раз сделаем ещё круче — настроим систему мониторинга на сервере, чтобы нам на почту приходило сообщение, когда служба перезапускается или останавливается с ошибкой. Подпишитесь, чтобы не пропустить.

Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём!

В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.

Источник

Как управлять службами Systemd на удаленном сервере Linux

Диспетчер системы и служб Systemd можно контролировать с помощью утилиты командной строки systemctl. Он позволяет вам управлять systemd локально или на удаленной машине Linux по протоколу SSH.

В этой короткой статье мы покажем вам, как управлять системой systemd и диспетчером служб на удаленной машине Linux через сеанс SSH.

Внимание. Мы рекомендуем использовать пары открытого и закрытого ключей для аутентификации без пароля для SSH, в отличие от паролей, а также использовать дополнительные методы для защиты службы SSH, как описано выше. в этих справочниках.

  1. Беспарольный вход по SSH с помощью SSH Keygen за 5 простых шагов
  2. 5 рекомендаций по безопасности и защите SSH-сервера
  3. Как заблокировать доступ по SSH и FTP к определенному IP-адресу и сетевому диапазону
Читайте также:  Linux ограничение количество открытых файлов

Чтобы подключиться к удаленному серверу, запустите systemctl с флагом —host или -H следующим образом. В приведенной ниже команде мы подключаемся к удаленному серверу как пользователь root, а status — это подкоманда утилиты systemctl, используемая для просмотра состояния httpd [Ctrl+C] . Дополнительную информацию и варианты использования см. на справочной странице systemctl:

Это пока все! Далее следует подборка статей по systemd, которые могут быть вам полезны:

  1. История: почему init нужно было заменить на systemd в Linux
  2. Управление процессом запуска системы и службами (SysVinit, Systemd и Upstart)
  3. Управление сообщениями журнала в Systemd с помощью Journalctl [подробное руководство]
  4. Как создавать и запускать новые сервисные единицы в Systemd с помощью сценария оболочки
  5. Как изменить уровни запуска (цели) в SystemD

В этой статье мы показали вам, как управлять системой systemd и диспетчером служб на удаленной машине Linux. Используйте раздел обратной связи, чтобы задать вопросы или поделиться своими мыслями об этом руководстве.

Источник

запуск сервисов удаленно

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

Конечно есть, позвони по телефону человеку, который находится рядом с сервером, скажи пароль root и попроси перезапустить ssh сервис, ну либо позвони электрикам и попроси вырубить питание в серверной на время достаточное для разрядки UPS и включить затем.

kostik87 ★★★★★ ( 13.07.16 09:59:07 MSK )
Последнее исправление: kostik87 13.07.16 09:59:20 MSK (всего исправлений: 1)

К примеру на консоль локально нет возможности тоже попасть.

Вырубай электричество, затем надейся что при загрузке ОС всё поднимется.

Зайти по IPMI, если есть. Или попросить персонал в DC подключить KVM временно. Или если есть remote reset service — ребутнуть машинку и грызя локти надеятся, что в этот раз запустится.

Ну IPMI это практически доступ локально. 🙂

если товарищь в курсе, что это такое. Снимаю шляпу, про это даже не вспомнил, неужели у кого то есть на линуксовых тачках это?

По крайней мере на всех SuperMicro бордах оно встроенное.

И да, мы не знаем, о каком компе речь идёт. Сервер в DC? Замурованый в стену mikrotik? Комп бухгалтера на дельнем севере?

beastie ★★★★★ ( 13.07.16 13:06:56 MSK )
Последнее исправление: beastie 13.07.16 13:09:09 MSK (всего исправлений: 1)

обычно это значит что ОС вместо того чтобы грузиться просит пароль рута для проверки диска 8)

Ситуация решается подключением монитора и фотографированием экрана — т.к. если ребята сами не смогли исправить, значит правильно описать находящееся на экране тоже не смогут.

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

обычно это значит что ОС вместо того чтобы грузиться просит пароль рута для проверки диска 8)

С большей вероятностью это значит, что с апдейтами прилетел systemd. ж)

Читайте также:  How to check what linux version

И да, fsck может длится очень долго. А может и отвалится на пол-дороги.

а fsck может вообще сам не запускаться а требовать пароль рута, зависит от дистра и настроек, у нас чаще именно из-за этого случались факапы

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

зайти даже локально нет возможности

Источник

Как запустить, остановить и перезапустить сервисы в Linux

img

Linux обеспечивает детальный контроль над системными службами через systemd с помощью команды systemctl. Службы могут быть включены, выключены, перезапущены, перезагружены или даже включены или отключены при загрузке. Если вы используете Debian, CentOSили Ubuntu, ваша система, вероятно, использует systemd.

Как запустить, остановить и перезапустить сервисы в Linux

Это руководство покажет вам, как использовать основные команды для запуска, остановки и перезапуска служб в Linux.

Базовый синтаксис команды systemctl

Основной синтаксис для использования команды systemctl:

systemctl [command] [service_name]

Как правило, вам нужно запускать это как суперпользователь поэтому команды будут начинаться с sudo.

Как проверить, работает ли служба в Linux

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

sudo systemctl status SERVICE_NAME

Замените SERVICE_NAME на нужный сервис.

В нашем случае мы будем брать за пример веб-сервер Apache.

Интересный факт: в Ubuntu и других дистрибутивах на основе Debian служба Apache называется apache2. В CentOS и других дистрибутивах RedHat служба Apache называется httpd или httpd.service

sudo systemctl status apache2

Так мы проверили состояние Apache. Выходные данные показывают, что служба активна (работает), как на рисунке ниже:

status

Как перезапустить сервис

Чтобы остановить и перезапустить службу в Linux, используйте команду:

sudo systemctl restart SERVICE_NAME

Где SERVICE_NAME — имя вашего сервиса.

После выполнения команды ваш сервис должен снова заработать. Вы можете проверить состояние с помощью команды status

Для перезапуска нашего сервера Apache используем:

sudo systemctl restart apache2

restart

Как перезагрузить конфигурационные файлы сервиса

Чтобы служба перезагрузила свои файлы конфигурации, введите в терминале следующую команду:

sudo systemctl reload SERVICE_NAME

После перезагрузки проверьте ее состояние командой status для подтверждения.

В нашем примере мы перезагрузили Apache, используя:

sudo systemctl reload apache2

reload

Как запустить сервис

Чтобы запустить службу в Linux вручную, введите в терминале следующее:

sudo systemctl start SERVICE_NAME

Например, команда для запуска службы Apache:

sudo systemctl start apache2

Как остановить сервис

Чтобы остановить активную службу в Linux, используйте следующую команду:

sudo systemctl stop SERVICE_NAME

Для нашего апача используем команду

sudo systemctl stop apache2

Проверьте, остановился ли сервис с помощью команды status . Вывод должен показать, что сервис неактивен — inactive (dead)

stop

Как включить сервис при загрузке

Чтобы настроить службу для запуска при загрузке системы, используйте команду:

sudo systemctl enable SERVICE_NAME

Чтобы включить Apache при загрузке системы, выполните команду:

sudo systemctl enable apache2

enable

Как отключить сервис при загрузке

Вы можете запретить запуск службы при загрузке с помощью команды:

sudo systemctl disable SERVICE_NAME
sudo systemctl disable apache2

Источник

Оцените статью
Adblock
detector