Назад | Перейти на главную страницу

Как отключить службу systemd?

Я создал следующую службу systemd:

[Unit]
Description=ISPConfig DC Sync
After=network.target
After=mysql.service
After=nginx.service

[Service]
User=root
Group=root
Type=simple
ExecStart=/usr/local/ispconfig/server/server.sh

[Install]
WantedBy=multi-user.target

У команды (.sh) есть цикл, который возвращает сообщение о том, была ли у нее ошибка или она была успешной. Проблема в том, что этот результат печатается в журнале сообщений (/ var / log / messages). Есть способ предотвратить это? (Желательно в спецификации собственного сервиса)

В документация заявляет, что вы можете установить StandardOutput= и StandardError= к чему угодно. По умолчанию они относятся к журналу, но вы можете перенаправить их в любое из нескольких мест.

Управляет тем, к чему подключен файловый дескриптор 1 (STDOUT) выполняемых процессов. Занимает одно из inherit, null, tty, journal, syslog, kmsg, journal+console, syslog+console, kmsg+console, socket или fd.

...

null подключает стандартный вывод к /dev/null, т.е. все записанное в него будет потеряно.

StandardError= похожа, за одним важным исключением того, как она inherits (что также по умолчанию):

Управляет местом подключения файлового дескриптора 2 (STDERR) исполняемых процессов. Доступные опции идентичны опциям StandardOutput=, за некоторыми исключениями: если установлено значение inherit дескриптор файла, используемый для стандартного вывода, дублируется для стандартной ошибки, а fd работает с потоком ошибок и по умолчанию будет искать дескриптор с именем "stderr".

Итак, вы можете сделать это:

[Service]
StandardOutput=null
StandardError=journal

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

Итак, вам действительно не следует ничего делать с модулем systemd. Скорее, если вы не хотите, чтобы сценарий выводил что-либо в случае успеха, исправьте сценарий.