[ZBX-19709] kill(1) in systemd service files produces confusing error messages in log if the service failed to start Created: 2021 Jul 15  Updated: 2024 Apr 10  Resolved: 2021 Oct 17

Status: Closed
Project: ZABBIX BUGS AND ISSUES
Component/s: Packages (C)
Affects Version/s: 5.4.2
Fix Version/s: 5.4.6rc1, 6.0.0alpha4, 6.0 (plan)

Type: Problem report Priority: Trivial
Reporter: WHR Assignee: Jurijs Klopovskis
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

Debian GNU/Linux version 9 (Stretch), with systemd(1) as init system.


Team: Team B
Sprint: Sprint 78 (Jul 2021), Sprint 79 (Aug 2021), Sprint 80 (Sep 2021)
Story Points: 0.5

 Description   

Currently the systemd service configuration files installed by Zabbix Debian packages contain the following line:

ExecStop=/bin/kill -SIGTERM $MAINPID

It works fine in most cases; but if the specified service has failed to start, for example, failed to bind(2) to its listing port, systemd(1) will invoke the ExecStop command line with $MAINPID expanded to empty, before trying to restart the service; the caused kill(1) to produce a long usage message in log, becasue no PID is specified; take service zabbix-agent for example, the log would be like:

Jul 15 12:56:23 x systemd[1]: Starting Zabbix Agent...
Jul 15 12:56:23 x systemd[1]: zabbix-agent.service: Supervising process 69594 which is not our child. We'll most likely not notice when it exits.
Jul 15 12:56:23 x systemd[1]: Started Zabbix Agent.
Jul 15 12:56:23 x systemd[1]: zabbix-agent.service: Main process exited, code=exited, status=1/FAILURE
Jul 15 12:56:23 x kill[69598]: Usage:
Jul 15 12:56:23 x kill[69598]:  kill [options] <pid> [...]
Jul 15 12:56:23 x kill[69598]: Options:
Jul 15 12:56:23 x kill[69598]:  <pid> [...]            send signal to every <pid> listed
Jul 15 12:56:23 x kill[69598]:  -<signal>, -s, --signal <signal>
Jul 15 12:56:23 x kill[69598]:                         specify the <signal> to be sent
Jul 15 12:56:23 x kill[69598]:  -l, --list=[<signal>]  list all signal names, or convert one to a name
Jul 15 12:56:23 x kill[69598]:  -L, --table            list all signal names in a nice table
Jul 15 12:56:23 x kill[69598]:  -h, --help     display this help and exit
Jul 15 12:56:23 x kill[69598]:  -V, --version  output version information and exit
Jul 15 12:56:23 x kill[69598]: For more details see kill(1).
Jul 15 12:56:23 x systemd[1]: zabbix-agent.service: Control process exited, code=exited status=1
Jul 15 12:56:23 x systemd[1]: zabbix-agent.service: Unit entered failed state.
Jul 15 12:56:23 x systemd[1]: zabbix-agent.service: Failed with result 'exit-code'.

These log messages will repeating every time the service process failed.
 
I suggest changing the ExecStop command line as followings, to avoid produce such confusing messages in log:

ExecStop=/bin/sh -c '[ -n "$1" ] && kill -s TERM "$1"' -- "$MAINPID"

In addition, the kill(1) command usage has changed silently for POSIX compliance; specifically, according to this page:

Values of signal_name shall be recognized in a case-independent fashion, without the SIG prefix.


 Comments   
Comment by Jurijs Klopovskis [ 2021 Jul 21 ]

Moved to ZBX

Comment by Jurijs Klopovskis [ 2021 Jul 22 ]

Fixed in pre 5.4.4 for debian-based distros.

Generated at Sat May 10 07:32:02 EEST 2025 using Jira 9.12.4#9120004-sha1:625303b708afdb767e17cb2838290c41888e9ff0.