Вопрос или проблема
Я учусь создавать сервисы с помощью systemd. Я получаю эту ошибку:
.service: Запрос на запуск повторяется слишком быстро.
Я больше не могу запустить сервис; он работал вчера. Что я делаю не так?
(root@Kundrum)-(11:03:19)-(~)
$nano /lib/systemd/system/swatchWATCH.service
1 [Unit]
2 Description=Мониторинг журналов и отправка отчетов на почту
3 After=syslog.target network.target
4
5 [Service]
6 Type=simple
7 ExecStart=/usr/bin/swatch --config-file=/home/kristjan/.swatchrc --input-record-separator="\n \n " --tail-file=/var/log/snort/alert --daemon
8 Restart=on-failure
9 StartLimitInterval=3
10 StartLimitBurst=100
11
12 [Install]
13 WantedBy=multi-user.target
StartLimitInterval
и StartLimitBurst
я добавил после попыток починить это.
Моя система – Debian 9.8 Stretch, все обновления.
Во-первых, если это пользовательский сервис, он должен находиться в /etc/systemd/system
. /lib/systemd
предназначен для файлов, предоставленных пакетами.
Во-вторых, скорее всего, сервис аварийно завершается, и systemd пытается перезапустить его многократно, поэтому вам нужно выяснить, почему он падает. Проверьте логи сервиса с помощью:
journalctl -e -u swatchWATCH
Возможно, там будет дополнительная информация в основном журнале:
journalctl -e
Наконец, проверьте, корректно ли он запускается непосредственно из командной строки:
/usr/bin/swatch –config-file=/home/kristjan/.swatchrc –input-record-separator=”\n \n ” –tail-file=/var/log/snort/alert –daemon
Я вижу, что вы используете опцию --daemon
. Это часто ошибка с systemd. Systemd делает это за вас. Попробуйте удалить эту опцию.
Если ничего не поможет, посмотрите, что изменилось с тех пор, как вчера все работало.
Быстрое решение для “systemd[1]: SERVICE: Запрос на запуск повторяется слишком быстро” – это
systemctl reset-failed SERVICE
systemctl start SERVICE
systemctl status SERVICE
Актуальная цитата из man systemctl:
reset-failed [PATTERN…]
… счетчик лимита скорости запуска сбрасывается в ноль. Таким образом, если лимит запуска юнита (как указано с помощью
StartLimitIntervalSec=/StartLimitBurst=
) превышен и юнит отказывается быть запущенным снова, используйте
эту команду, чтобы сделать его снова пригодным для запуска.”
В моем случае сообщение об ошибке было несколько вводящим в заблуждение. Причина сбоя оказалась в копировании между машинами. Строка
User=my_user
в моем конфигурационном файле сервиса /etc/systemd/system/infinite_script.service
была виновником.
На новом компьютере не было этого пользователя. Изменение на User=root
решило эту проблему.
В моем случае часть ответа @Mark Stosberg сработала. Я удалил дополнительный атрибут –daemon из ExecStart файла юнита сервиса, и это сработало (в моем случае это была проблема nxserver с “.service: Запрос на запуск повторяется слишком быстро.”).
Ответ или решение
Чтобы решить проблему, связанную с ошибкой ".service: Start request repeated too quickly." при использовании системного демона systemd, нужно следовать нескольким шагам. Вот подробное руководство:
1. Проверка конфигурации сервиса
Во-первых, убедитесь, что файл вашего сервиса находится в правильном каталоге. Для пользовательских сервисов рекомендуется использовать /etc/systemd/system
, так как /lib/systemd/system
предназначен только для файлов, предоставляемых пакетами.
2. Анализ логов
Данная ошибка обычно возникает, если сервис аварийно завершает работу или не может стартовать из-за ошибки. Чтобы выяснить, что именно вызывает сбой, проверьте логи сервиса:
journalctl -e -u swatchWATCH
Также рекомендуется проверить основной журнал на наличие дополнительных сведений:
journalctl -e
3. Запуск сервиса вручную
Попробуйте запустить вашу команду вручную в терминале, чтобы убедиться, что она работает корректно:
/usr/bin/swatch --config-file=/home/kristjan/.swatchrc --input-record-separator="\n \n " --tail-file=/var/log/snort/alert
4. Убедитесь в отсутствии опции --daemon
Обратите внимание, что использование опции --daemon
в вашем случае может быть проблемой. systemd уже обрабатывает демонизацию. Убедитесь, что вы удалили эту опцию из вашего ExecStart
.
5. Сбросить статус сервиса
Если сервис зафиксировал слишком много неудачных попыток запуска, вы можете сбросить его статус с помощью следующих команд:
systemctl reset-failed swatchWATCH.service
systemctl start swatchWATCH.service
systemctl status swatchWATCH.service
6. Проверка пользователя
Если в вашем сервисном файле указан параметр User=
(например, User=my_user
), убедитесь, что этот пользователь существует на системе. Если его нет, измените этот параметр на существующего пользователя или используйте User=root
.
7. Анализ изменений
Если ваш сервис работал ранее, важно проанализировать, какие изменения были внесены с момента последнего успешного запуска. Это может дать ключ к пониманию проблемы.
Заключение
Следуя этим шагам, вы сможете диагностировать и исправить проблему, приводящую к ошибке ".service: Start request repeated too quickly." Убедитесь, что ваш сервис правильно настроен и работает без ошибок.