Вопрос или проблема
Я пытался настроить rsyslog для пересылки логов из конкретного файла на syslog-сервер, и в итоге очистил всю конфигурацию (сервис rsyslog застрял – не запускался)…
Поэтому я все очистил и установил все заново… и теперь он выдает ошибку при запуске.
Вот версия ОС:
~# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
Вот версия rsyslog:
~# rsyslogd -v
rsyslogd 8.2212.0 (aka 2022.12) скомпилирован с:
PLATFORM: x86_64-pc-linux-gnu
PLATFORM (lsb_release -d):
FEATURE_REGEXP: Yes
GSSAPI Kerberos 5 support: No
FEATURE_DEBUG (debug build, slow code): No
32bit Atomic operations supported: Yes
64bit Atomic operations supported: Yes
memory allocator: system default
Runtime Instrumentation (slow code): No
uuid support: Yes
systemd support: No
Config file: /etc/rsyslog.conf
PID file: /var/run/rsyslogd.pid
Number of Bits in RainerScript integers: 64
Смотрите https://www.rsyslog.com для получения дополнительной информации.
Вот мой rsyslog.conf:
~# cat /etc/rsyslog.conf
# /etc/rsyslog.conf Файл конфигурации для rsyslog.
#
# Для получения дополнительной информации смотрите
# /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html
#################
#### МОДУЛИ ####
#################
module(load="imuxsock") # предоставляет поддержку локальной системной записи логов
module(load="imklog") # предоставляет поддержку записи логов ядра
#module(load="immark") # предоставляет возможность сообщений --MARK--
# предоставляет прием UDP syslog
#module(load="imudp")
#input(type="imudp" port="514")
# предоставляет прием TCP syslog
#module(load="imtcp")
#input(type="imtcp" port="514")
###########################
#### ГЛОБАЛЬНЫЕ ДИРЕКТИВЫ ####
###########################
#
# Использовать традиционный формат временной метки.
# Чтобы включить временные метки высокой точности, закомментируйте следующую строку.
#
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
#
# Установить права доступа по умолчанию для всех файлов логов.
#
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
#
# Где размещать файлы хранилища и состояния
#
$WorkDirectory /var/spool/rsyslog
#
# Включить все конфигурационные файлы из /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf
###############
#### ПРАВИЛА ####
###############
#
# Первые несколько стандартных файлов логов. Запись по учреждению.
#
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
#cron.* /var/log/cron.log
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
#
# Запись для почтовой системы. Разделите, чтобы
# было легко писать скрипты для парсинга этих файлов.
#
mail.info -/var/log/mail.info
mail.warn -/var/log/mail.warn
mail.err /var/log/mail.err
#
# Некоторые "универсальные" файлы логов.
#
*.=debug;\
auth,authpriv.none;\
news.none;mail.none -/var/log/debug
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages
#
# Аварийные сообщения отправляются всем, кто вошел в систему.
#
*.emerg :omusrmsg:*
И, наконец, сервис systemd (который является символической ссылкой на /lib/systemd/system/rsyslog.service):
~# cat /etc/systemd/system/syslog.service
[Unit]
Description=Служба системного логирования
Requires=syslog.socket
Documentation=man:rsyslogd(8)
Documentation=man:rsyslog.conf(5)
Documentation=https://www.rsyslog.com/doc/
[Service]
Type=notify
ExecStart=/usr/sbin/rsyslogd -n
StandardOutput=null
Restart=on-failure
# Увеличьте значение по умолчанию, чтобы позволить отслеживать
# много одновременных файлов, возможно, нам понадобится много дескрипторов.
#LimitNOFILE=16384
[Install]
WantedBy=multi-user.target
Alias=syslog.service
Когда я запускаю /usr/sbin/rsyslogd -n
, я получаю:
~# /usr/sbin/rsyslogd -n
rsyslogd: pidfile '/var/run/rsyslogd.pid' и pid 6260 уже существуют.
Если вы хотите запустить несколько экземпляров rsyslog, вам нужно указать
разные pid файлы для них (опция -i).
rsyslogd: запуск не удался с ошибкой -3000 (см. rsyslog.h или попробуйте https://www.rsyslog.com/e/3000, чтобы узнать, что означает этот номер)
Статус службы говорит:
~# systemctl status rsyslog.service
● rsyslog.service - Служба системного логирования
Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Thu 2022-12-22 08:05:56 CET; 8s ago
Docs: man:rsyslogd(8)
man:rsyslog.conf(5)
https://www.rsyslog.com/doc/
Process: 6464 ExecStart=/usr/sbin/rsyslogd -n (code=exited, status=1/FAILURE)
Main PID: 6464 (code=exited, status=1/FAILURE)
Dec 22 08:05:56 TW-3CXNFA-B systemd[1]: rsyslog.service: Основной процесс завершился, код=exited, status=1/FAILURE
Dec 22 08:05:56 TW-3CXNFA-B systemd[1]: rsyslog.service: Не удалось запустить систему с результатом 'exit-code'.
Dec 22 08:05:56 TW-3CXNFA-B systemd[1]: Не удалось запустить службу системного логирования.
Dec 22 08:05:56 TW-3CXNFA-B systemd[1]: rsyslog.service: Время ожидания повторного запуска службы исчерпано, запланирован повторный запуск.
Dec 22 08:05:56 TW-3CXNFA-B systemd[1]: rsyslog.service: Запланирована задача повторного запуска, счетчик перезапуска составляет 5.
Dec 22 08:05:56 TW-3CXNFA-B systemd[1]: Служба системного логирования остановлена.
Dec 22 08:05:56 TW-3CXNFA-B systemd[1]: rsyslog.service: Запрос на запуск повторен слишком быстро.
Dec 22 08:05:56 TW-3CXNFA-B systemd[1]: rsyslog.service: Не удалось запустить систему с результатом 'exit-code'.
Dec 22 08:05:56 TW-3CXNFA-B systemd[1]: Не удалось запустить службу системного логирования.
Я немного застрял здесь… Я гуглил сообщение “pid уже существует” и многие другие, но это никуда не привело 🙁
Я был бы признателен за небольшую подсказку, пожалуйста 🙁 Есть идеи, что мне нужно сделать?
———– РЕДАКЦИЯ ————
Я попробовал это, согласно вашим советам…
Отредактировал (r)syslog.service и добавил -iNONE в качестве параметра:
~# cat /etc/systemd/system/syslog.service
[Unit]
Description=Служба системного логирования
Requires=syslog.socket
Documentation=man:rsyslogd(8)
Documentation=man:rsyslog.conf(5)
Documentation=https://www.rsyslog.com/doc/
[Service]
Type=notify
ExecStart=/usr/sbin/rsyslogd -n -iNONE
StandardOutput=null
Restart=on-failure
# Увеличьте значение по умолчанию, чтобы позволить отслеживать много одновременных файлов, возможно, нам понадобится много дескрипторов.
#LimitNOFILE=16384
[Install]
WantedBy=multi-user.target
Alias=syslog.service
Перезагрузил демон -> systemctl daemon-reload
(без сообщений об ошибках)
Остановил оба systemctl stop syslog.socket rsyslog.service
Проверил статус обоих:
~# systemctl status syslog.socket rsyslog.service
● syslog.socket - Сокет Syslog
Loaded: loaded (/lib/systemd/system/syslog.socket; static; vendor preset: disabled)
Active: inactive (dead) since Thu 2022-12-22 14:57:32 CET; 18s ago
Docs: man:systemd.special(7)
https://www.freedesktop.org/wiki/Software/systemd/syslog
Listen: /run/systemd/journal/syslog (Datagram)
Dec 22 10:17:58 TW-3CXNFA-B systemd[1]: Listening on Syslog Socket.
Dec 22 14:57:32 TW-3CXNFA-B systemd[1]: syslog.socket: Успешно завершено.
Dec 22 14:57:32 TW-3CXNFA-B systemd[1]: Закрыт сокет Syslog.
● rsyslog.service - Служба системного логирования
Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Thu 2022-12-22 14:57:32 CET; 18s ago
Docs: man:rsyslogd(8)
man:rsyslog.conf(5)
https://www.rsyslog.com/doc/
Process: 22681 ExecStart=/usr/sbin/rsyslogd -n -iNONE (code=exited, status=0/SUCCESS)
Main PID: 22681 (code=exited, status=0/SUCCESS)
Dec 22 14:56:59 TW-3CXNFA-B systemd[1]: Запуск службы системного логирования...
Dec 22 14:57:32 TW-3CXNFA-B systemd[1]: rsyslog.service: Успешно завершено.
Dec 22 14:57:32 TW-3CXNFA-B systemd[1]: Служба системного логирования остановлена.
Оба неактивны… Я затем проверил, есть ли активный PID (все в порядке)
~# ps axu | grep rsyslog
root 22747 0.0 0.0 6072 888 pts/0 S+ 14:59 0:00 grep rsyslog
Проверил, существует ли pid файл ls /var/run/ | grep syslog
(нет)
Затем я запустил службу, что дало сообщение о превышении времени ожидания:
~# systemctl start rsyslog
Job for rsyslog.service failed because a timeout was exceeded.
See "systemctl status rsyslog.service" and "journalctl -xe" for details.
Проверяя статус:
~# systemctl status rsyslog.service
● rsyslog.service - Служба системного логирования
Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: activating (start) since Thu 2022-12-22 15:03:16 CET; 1min 26s ago
Docs: man:rsyslogd(8)
man:rsyslog.conf(5)
https://www.rsyslog.com/doc/
Main PID: 22896 (rsyslogd)
Tasks: 4 (limit: 1136)
Memory: 824.0K
CGroup: /system.slice/rsyslog.service
└─22896 /usr/sbin/rsyslogd -n -iNONE
Dec 22 15:03:16 TW-3CXNFA-B systemd[1]: Запуск службы системного логирования...
Плюс журнал:
~# journalctl -xe
-- Задача завершения для юнита rsyslog.service завершена.
--
-- Идентификатор задания 25478 и результат задания завершен.
Dec 22 15:03:16 TW-3CXNFA-B systemd[1]: Запуск службы системного логирования...
-- Объект: Задача старта для юнита rsyslog.service начала свое выполнение
-- Определено: systemd
-- Поддержка: https://www.debian.org/support
--
-- Задача старта для юнита rsyslog.service начала свое выполнение.
--
-- Идентификатор задания 25478.
Dec 22 15:04:46 TW-3CXNFA-B systemd[1]: rsyslog.service: Операция старта превысила время ожидания. Прекращение.
Dec 22 15:04:46 TW-3CXNFA-B systemd[1]: rsyslog.service: Не удалось запустить систему с результатом 'timeout'.
-- Объект: Юнит завершился
-- Определено: systemd
-- Поддержка: https://www.debian.org/support
--
-- Юнит rsyslog.service вошел в состояние 'failed' с результатом 'timeout'.
Dec 22 15:04:46 TW-3CXNFA-B systemd[1]: Не удалось запустить службу системного логирования.
-- Объект: Задача старта для юнита rsyslog.service завершилась с неудачей
-- Определено: systemd
-- Поддержка: https://www.debian.org/support
--
-- Задача старта для юнита rsyslog.service завершилась с неудачей.
--
-- Идентификатор задания 25478 и результат задания завершен.
Dec 22 15:04:46 TW-3CXNFA-B systemd[1]: rsyslog.service: Время ожидания повторного запуска службы исчерпано, запланирован повторный запуск.
Dec 22 15:04:46 TW-3CXNFA-B systemd[1]: rsyslog.service: Запланирована задача повторного запуска, счетчик перезапуска составляет 2.
-- Объект: Автоматический перезапуск юнита запланирован
-- Определено: systemd
-- Поддержка: https://www.debian.org/support
--
-- Автоматический перезапуск юнита rsyslog.service запланирован, так как результат для
-- настроенной установки Restart= для юнита.
Dec 22 15:04:46 TW-3CXNFA-B systemd[1]: Служба системного логирования остановлена.
-- Объект: Задача завершения для юнита rsyslog.service завершена
-- Определено: systemd
-- Поддержка: https://www.debian.org/support
--
-- Задача завершения для юнита rsyslog.service завершена.
--
-- Идентификатор задания 25554 и результат задания завершен.
Dec 22 15:04:46 TW-3CXNFA-B systemd[1]: Запуск службы системного логирования...
-- Объект: Задача старта для юнита rsyslog.service начала свое выполнение
-- Определено: systemd
-- Поддержка: https://www.debian.org/support
--
-- Задача старта для юнита rsyslog.service начала свое выполнение.
--
-- Идентификатор задания 25554.
Dec 22 15:05:01 TW-3CXNFA-B CRON[22955]: pam_unix(cron:session): сессия открыта для пользователя root (uid=0)
Dec 22 15:05:01 TW-3CXNFA-B CRON[22956]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Dec 22 15:05:01 TW-3CXNFA-B CRON[22955]: pam_unix(cron:session): сессия закрыта для пользователя root
Что же я упустил?
По умолчанию местоположение файла PID для rsyslog – /var/run/rsyslogd.pid
(как описано в man rsyslogd
). Посмотрите, что внутри этого файла.
Проверьте, действительно ли этот PID является rsyslogd
(что-то вроде ps axu | grep $(cat /var/run/rsyslogd.pid)
и ps axu | grep rsyslogd
). Если он запущен, завершите его, как предложено, и удалите файл PID. В этом проблема, когда менеджер службы считает, что служба не работает, тогда как на самом деле работает (например, она не смогла остановиться).
Если PID существует, но это не rsyslogd
, не убивайте его. Он, вероятно, не связан с этим, и такое действие навредит скорее, чем поможет. Просто удалите файл PID rsyslog. Это могло произойти, потому что rsyslog создал файл, поместил туда свой PID и затем остановился, а система позже переиспользовала этот PID для чего-то еще.
Теперь, когда служба очевидно не работает и нет вводящего в заблуждение файла PID, попробуйте снова запустить ее с помощью менеджера службы, наблюдая за запуском в /var/log/daemon.log
и других файлах логов (messages
, syslog
) и проверяя наличие ошибок во время запуска.
Интересно, что с Debian 11 она настроена так, чтобы не записывать никакой PID файл (запуск выглядит как /usr/sbin/rsyslogd -n -iNONE
).
Я думаю, это ошибка, о которой сообщалось по следующей ссылке:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=815862
Это кажется нелогичным… но фактические шаги, которые нужно выполнить, заключаются в том, что вам нужно остановить ДВА юнита systemd, а не только rsyslog.service
или убить PID rsyslog:
systemctl stop syslog.socket rsyslog.service
Ответ или решение
Проблема с запуском службы rsyslog
из-за существующего PID-файла может быть вызвана тем, что служба пытается использовать PID, который уже занят другим процессом, или же PID-файл остался от предыдущего сеанса. Данная ошибка может возникнуть после неудачных попыток запуска, останавливания или перезапуска самой службы, что часто происходит при неисправной конфигурации.
Вот основные шаги, которые вам необходимо выполнить для решения проблемы:
-
Проверка существования PID-файла и его содержимого:
Выполните команду, чтобы проверить содержимое PID-файла:cat /var/run/rsyslogd.pid
Запомните PID, который там указан.
-
Проверка, запущен ли процесс rsyslog:
Используйте следующую команду, чтобы узнать, соответствует ли этот PID процессуrsyslogd
:ps axu | grep $(cat /var/run/rsyslogd.pid)
Также можете проверить, запущен ли вообще процесс
rsyslogd
:ps axu | grep rsyslogd
-
Остановка службы:
Необходимо остановить не толькоrsyslog.service
, но иsyslog.socket
. Используйте следующую команду:systemctl stop syslog.socket rsyslog.service
-
Удаление некорректного PID-файла:
Если процессrsyslogd
не запущен, и вы столкнулись с тем, что PID существует, но он не соответствуетrsyslogd
, безопасно удалите его:rm /var/run/rsyslogd.pid
-
Перезапуск службы:
Попробуйте снова запустить службуrsyslog
:systemctl start rsyslog.service
-
Проверка статуса службы:
Убедитесь, что служба запустилась без ошибок:systemctl status rsyslog.service
-
Мониторинг журналов:
При запуске службы, следите за журналами, чтобы увидеть любую дополнительную информацию об ошибках:journalctl -xe
-
Если это не помогло:
Если после выполнения всех вышеуказанных шагов служба все еще не запускается, проверьте настройки конфигурации в/etc/rsyslog.conf
и в папке/etc/rsyslog.d/
, чтобы убедиться в отсутствии синтаксических ошибок или конфликтов. -
Дополнительные параметры:
Если вы хотите исключить возможность создания PID-файла, вы можете изменить файл службыrsyslog.service
, добавив параметр-iNONE
в команду запуска. Убедитесь, что изменения сохранены, а затем выполните команду:systemctl daemon-reload
Теперь попробуйте снова запустить
rsyslog.service
.
После выполнения всех этих шагов, служба rsyslog
должна начать нормально функционировать. Если же проблема все еще сохраняется, возможно, стоит обратиться к документации rsyslog
или сообществу для получения более подробной помощи.