Возможно ли, что процесс systemctl не будет работать, если я не вошел на сервер?

Вопрос или проблема

Я совсем новичок в Linux, и мне нужна помощь. Я пытаюсь запустить процессы узла блокчейна в фоновом режиме, чтобы они работали без моего входа в систему.

Я использую systemctl, чтобы запустить мой процесс в фоновом режиме.

Вот мои .service файлы

Корневая директория, команда, идентификаторы и пользователь были просто отредактированы в файле, они не импортируются. Также команды работают в “foreground”, то есть когда я просто запускаю их в терминале.

1-й

[Unit]
Description=MY_DESC
After=network.target

[Service]
Type=simple
Restart=always
RestartSec=1
User=USER
WorkingDirectory=ROOT_DIR
ExecStart=MY_COOL_CMD
StandardOutput=journal
StandardError=journal
SyslogIdentifier=MY_ID
StartLimitInterval=0
LimitNOFILE=65536
LimitNPROC=65536

[Install]
WantedBy=multi-user.target

2-й файл сервиса

[Unit]
Description=MY_DESC
After=network.target 1st-service.service

[Service]
Type=simple
Restart=always
RestartSec=1
User=USER
WorkingDirectory=HOME_DIR
Environment="DAEMON_NAME=CMD_DIR"
Environment="DAEMON_HOME=HOME_DIR"
Environment="DAEMON_ALLOW_DOWNLOAD_BINARIES=false"
Environment="DAEMON_RESTART_AFTER_UPGRADE=true"
Environment="UNSAFE_SKIP_BACKUP=true"
ExecStart=MY_COOL_CMD
StandardOutput=journal
StandardError=journal
SyslogIdentifier=MY_ID
StartLimitInterval=0
LimitNOFILE=65536
LimitNPROC=65536

[Install]
WantedBy=multi-user.target

Я успешно активировал оба файла. Они, похоже, работают, когда я вошел в систему, но не когда меня нет. Ошибок нет, но когда я проверяю журналы, номера блоков не увеличиваются достаточно (последний раз я выходил из системы неделю назад, и высота блока увеличилась всего на 100,000 блоков. Это немного). Также, когда я пытаюсь проверить журналы за прошлое время (между 6 и 7 часами назад), журналы не показывают никаких записей…

Вот что я получаю, когда запрашиваю статус

1-й

my.service - MY_DESC
     Loaded: loaded (/etc/systemd/system/my.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2024-11-29 22:57:00 CET; 1 week 0 days ago
   Main PID: 1940037 (geth)
      Tasks: 23 (limit: 19099)
     Memory: 9.8G
        CPU: 4d 21h 2min 16.071s
     CGroup: /system.slice/my.service
             └─1940037 MY_COOL_CMD

2-й файл

my.service - my
     Loaded: loaded (/etc/systemd/system/my.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2024-11-29 23:02:23 CET; 1 week 0 days ago
   Main PID: 1940098 (cosmovisor)
      Tasks: 28 (limit: 19099)
     Memory: 4.7G
        CPU: 3d 4h 49min 4.542s
     CGroup: /system.slice/my.service
             ├─1940098 CMD_HERE
             └─1940111 CMD_HERE

Это когда я вошел в систему.

Если вам нужно увидеть что-то еще, чтобы дать мне совет по этому вопросу, пожалуйста, дайте знать.

Большое спасибо за ваше время и экспертизу!

Ответ или решение

Возможно ли, что процесс systemctl не будет работать без моего входа на сервер?

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

1. Актуальность фона

Системные службы, настроенные с помощью systemctl, созданы для работы независимо от пользовательских сессий. Как только вы активируете службу командой systemctl start <имя_сервиса>, она должна продолжать работу, даже если вы выйдете из системы.

2. Проверка вашего .service файла

В вашем случае вы привели два .service файла. Основные параметры, такие как User, WorkingDirectory, и ExecStart, выглядят корректно. Важно убедиться, что:

  • Параметр User установлен на нужного пользователя, обладающего правами запуска команд.
  • Путь в WorkingDirectory указан правильно и доступен для данного пользователя.
  • Команды в ExecStart корректны и работают, когда их запускают из консоли.

3. Журналирование и отладка

Когда вы проверяете состояние служб и обращаетесь к журналу с помощью journalctl, важно понимать, как записываются логи и что они могут не отражать все действия ваших служб. Если в журнале не отображается активности, возможно:

  • Процессы корректно не инициализируются в фоновом режиме.
  • Условие After=network.target 1st-service.service может не обеспечивать необходимую последовательность запуска.

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

journalctl -u имя_вашей_службы.service

Это должно помочь вам выяснить, почему не происходит ожидаемого обновления.

4. Общие рекомендации

  • Убедитесь, что службы настроены на автоматический перезапуск. Вы указали Restart=always, что правильно, но проверяйте, правильно ли работает этот механизм.
  • Настройте параметры, такие как TimeoutStartSec, если сервисы требуют больше времени на инициализацию.
  • Запускайте systemctl status <имя_сервиса> через регулярные промежутки времени, чтобы отслеживать их состояние.

5. Диагностика проблем

Если после всех проверок ваши процессы не работают:

  • Попробуйте временно удалить атрибуты, такие как User, чтобы запустить их от имени root и посмотрите, будет ли это иметь значение.
  • Проверяйте версию программного обеспечения, которое вы используете, иногда обновления могут вызывать проблемы с совместимостью.
  • Настройте уведомления для вашего сервиса, чтобы быть в курсе его статуса.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...