Package: monit
Version: 1:5.34.3-1
Severity: important

Dear Maintainer,

After upgrading from Debian Bookworm to Trixie, Monit began failing to start
whenever a "check program" block executes a script *directly*. Monit
validates
the configuration successfully (`monit -t` reports "Control file syntax
OK"),
but the daemon then crashes or starts without the HTTP interface, leading to
`systemctl status monit` showing:

  monit.service: Main process exited, status=1/FAILURE

This problem occurs only on Trixie’s Monit 5.34.3 package. The same config
worked fine on Bookworm.

-------------------------------------------------------------------------------
Minimal reproducible example
-------------------------------------------------------------------------------

1. Create a simple script:

   #!/bin/bash
   exit 1

2. Monit configuration that **fails**:

   check program test with path "/home/user/test.sh
<https://bitli.pro/2Ehxf_cda8f386>" timeout 15 seconds
     if status != 0 then exec "/bin/true"

3. Monit reports configuration OK, but the daemon crashes or refuses HTTP.

4. Changing only the path to use a shell wrapper makes it work:

   check program test with path "/bin/sh -c '/home/user/test.sh
<https://bitli.pro/2Ehxg_d8e2d88c>'" timeout 15 seconds
     if status != 0 then exec "/bin/true"

With `/bin/sh -c`, Monit starts normally and all behavior is restored.
Without it, Monit consistently fails on Trixie.

-------------------------------------------------------------------------------
Real-world configuration that broke after upgrading
-------------------------------------------------------------------------------

  check program ISP with path "/home/pi/checkISP.sh
<https://bitli.pro/2Ehxh_d7b03e4d>" timeout 15 seconds
    start program   = "/home/pi/Mullvad.sh
<https://bitli.pro/2Ehxi_16963e2f> start"   timeout 15 seconds
    stop program    = "/home/pi/Mullvad.sh
<https://bitli.pro/2Ehxj_8a78cced> stop"    timeout 15 seconds
    restart program = "/home/pi/Mullvad.sh
<https://bitli.pro/2Ehxk_82bad976> restart" timeout 15 seconds

    if status != 0 for 2 cycles then restart
    if 5 restarts within 5 cycles then timeout

This worked on Bookworm.
On Trixie, Monit fails unless the script paths are rewritten:

  path "/bin/sh -c '/home/pi/checkISP.sh <https://bitli.pro/2Ehxl_b471b4eb>
'"

-------------------------------------------------------------------------------
Expected behavior
-------------------------------------------------------------------------------

Monit should be able to execute a script directly via `check program`
without
requiring `/bin/sh -c`.

-------------------------------------------------------------------------------
Actual behavior
-------------------------------------------------------------------------------

- Monit daemon fails to start cleanly
- `monit summary` reports “daemon not running”
- systemd marks the service as exited with status=1

-------------------------------------------------------------------------------
System info
-------------------------------------------------------------------------------

Debian version: 13 (Trixie)
Package: monit 1:5.34.3-1
Init system: systemd 256

-------------------------------------------------------------------------------


Thank you.

Reply via email to