Hi Kacper, it looks like a problem which was fixed in monit 5.35.0: The pidfile may contain a PID from the previous system boot, which belongs to a thread of different process after reboot.
Please can you upgrade monit? (5.35.2 recommended) Best regards, Martin > On 22. 10. 2025, at 10:54, [email protected] wrote: > > Hi guys, > I have a problem with the monit daemon on my ARM system. Once every 5-6 times > when I'm restarting the whole system, it happens that the screen process > controlled by monit fails to start. I do not understand why. In monit logs or > in system logs, there is no helpful information. Additionally, when monit > claims that the process fails (and unmonitors it), I can see the proper > screen process with a correct pid file available on the system. When I > manually press "start service" in monit web gui, the correct process is found > by monit. My monit version is 5.34.3. > > I also do not understand how fast monit claims that the process fails to > start and unmonitors it (in monit logs look like it takes 1-2 sec while > timeout in monitrc for this process is 10 seconds). > > monitrc file: > set daemon 20 > set onreboot start > set log /var/log/monit.log > > check process screenprocess with pidfile /var/run/screenprocess.pid > if not exist then start > start program = "/etc/init.d/screenprocess start" with timeout 10 seconds > stop program = "/etc/init.d/screenprocess stop" with timeout 10 seconds > if 5 restarts within 5 cycles then unmonitor > > screenprocess init.d script: > > #!/bin/sh > > PIDFILE=/var/run/screenprocess.pid > SCREEN_PATH=/tmp/screen > > case "$1" in > start) > logger -t screenprocess "Starting ioc" > echo "Starting ioc" > if [ -f "$PIDFILE" ]; then > logger -t screenprocess "Screen process is already running." > echo "Screen process is already running." > exit 1 > fi > # create dir for screen socket files > mkdir -p $SCREEN_PATH > chmod 700 $SCREEN_PATH > export SCREENDIR=$SCREEN_PATH > # set stack limit > ulimit -s 1024 > # run screen > screen -c /etc/screenprocesslogs.conf -dmSL screenprocess ./start.cmd && > sleep 1 > # get pid of screen > screen -ls | grep -oE "[0-9]+\.screenprocess" | sed -e "s/\..*$//g" | > tail -n 1 > $PIDFILE > if [ -f "$PIDFILE" ]; then > NUM_PIDS=$(grep -E '^[0-9]+$' "$PIDFILE" | wc -l) > # check if only one screen session is active > if [ $NUM_PIDS -eq 1 ]; then > logger -t screenprocess "Screen process started successfully." > echo "Screen process started successfully." > else > logger -t screenprocess "Failed to start Screen process. Multiple > PIDs or none detected" > echo "Failed to start Screen process. Multiple PIDs or none detected" > exit 1 > fi > else > logger -t screenprocess "Failed to start Screen process. PID file > $PIDFILE not created" > echo "Failed to start Screen process. PID file $PIDFILE not created" > exit 1 > fi > ;; > > > Logs from monit: > [2025-10-22T08:27:22+0000] debug : pidfile '/var/run/screenprocess.pid' > does not exist > [2025-10-22T08:27:22+0000] error : 'screenprocess' process is not running > [2025-10-22T08:27:22+0000] debug : > ------------------------------------------------------------------------------- > [2025-10-22T08:27:22+0000] debug : > ------------------------------------------------------------------------------- > [2025-10-22T08:27:22+0000] debug : pidfile '/var/run/screenprocess.pid' > does not exist > [2025-10-22T08:27:22+0000] info : 'screenprocess' start: > '/etc/init.d/screenprocess start' > [2025-10-22T08:27:22+0000] info : 'mgmt' start on user request > [2025-10-22T08:27:22+0000] info : 'screenprocess' start on user request > [2025-10-22T08:27:22+0000] info : Monit daemon with PID 251 awakened > [2025-10-22T08:27:23+0000] debug : Starting screen process > screen process started successfully. > [2025-10-22T08:27:24+0000] error : 'screenprocess' service restarted 5 > times within 5 cycles(s) - unmonitor > > I'd be grateful for any tips on what can be wrong. > > Cheers > > Kacper > > >
