linuxshellsyslog

Understanding syslogd


could anyone explain what the following line of code does

/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true

and how is it different from

test -f /var/run/syslogd.pid && kill -HUP `cat /var/run/syslogd.pid`

[I know it should restart syslogd, but is there a difference between the two? bit of a linux noob, sorry]


Solution

    1. /bin/kill -HUP <PID> - sends SIGHUP signal to process identified by <PID> (process identifier). Sending this signal to deamons (or services if you prefer) usually instructs them to reread (read again) their configuration
    2. cat /var/run/syslogd.pid 2> /dev/null - reads the /var/run/syslogd.pid file (which contains PID of the syslogd daemon) and prints it to standard output (file descriptor = 0 (zero)). The 2> /dev/null part of it redirects standard error stream (file descriptor = 2 (two)) to /dev/null to discard all error messages that occured while reading /var/run/syslogd.pid
    3. test -f /var/run/syslogd.pid - tests if the file /var/run/syslogd.pid exists. If it exists it (usually) means that the daemon (in this case syslogd) is up and running.

    To summarise:

    1. The first command means: send SIGHUP to syslogd discard all error messages and return true if succeded.
    2. The second command means: if the syslogd daemon is running send SIGHUP to it
    3. /dev/null is a special device file that discards (ignores) everything that is written to it (like a bottomless well). Sometimes used to discard error messages (like in your case here).