Como indico o nível de log de uma linha de saída de um serviço systemd?

6

Eu tenho um script que pretendo executar como um serviço systemd.

Eu sei que stdout e stderr serão roteados para o diário do systemd. Existe alguma maneira de eu indicar que uma linha de saída seja tratada como INFO ou ERROR ou o que for apropriado?

    
por Dancrumb 04.03.2017 / 15:54

1 resposta

9

De systemd para desenvolvedores III: A vingança do sistema encontramos:

The printed string in this example is logged at a default log priority of LOG_INFO1. Sometimes it is useful to change the log priority for such a printed string. When systemd parses STDOUT/STDERR of a service it will look for priority values enclosed in < > at the beginning of each line

E os números mágicos aparentemente são copiados de syslog(3) so

$ egrep 'INFO|ERR' /usr/include/sys/syslog.h | fgrep define
#define LOG_ERR     3   /* error conditions */
#define LOG_INFO    6   /* informational */
#define LOG_PERROR  0x20    /* log to stderr as well */

Para emitir informações ou mensagens de erro de, e. um script TCL seria algo como

#!/usr/bin/env expect
puts "<3>auuugh"
puts "<6>infos"
    
por 04.03.2017 / 17:03