NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: bin/58408: cron ignores parameter "-n" in crontab




Hi Christos, thanks for looking into it,

I hope i am doing well replying to the email.

To ease the reproduction of the problem I re-do it all in a VM.

. I get an image from https://nycdn.netbsd.org/pub/arm/,
  download the image NetBSD 10.0, GENERIC 64 bit, decompress,
  change its size do 2G (required by qemu), rename to arm64.img
  for shorter command lines.

. I run it in qemu in Linux/Debian with
$> qemu-system-aarch64 -M virt -cpu cortex-a53 -smp 4 -m 4g -drive if=none,file=/home/p/download/arm64.img,id=hd0 -device virtio-blk-devic e,drive=hd0 -netdev type=user,id=net0 -device virtio-net-device,netdev=net0,mac=00:11:22:33:44:55 -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd -
nographic

. login as root

. Create the user "p" and its directory

. #> su p    ( i don't set password, this is a test machine)

. Create the file /home/p/test3.sh and /home/p/test4.sh
  code given previously, make them executable

. Create the empty file /home/p/test.log

. Create crontab
-----
# SHELL=/bin/sh
# MAILTO=p
#
# minute hour    mday    month   wday    command
*/1     *       *       *       *       -n /home/p/test3.sh
*/1     *       *       *       *       -n /home/p/test4.sh
-----

. I can't say if the first 2 lines are relevant, they shouldn't, i guess

. Reboot

. Wait a bit (say 10/20 mins), the errors does not appear immediately, still some
  clues are visible things are not going well

. Some sendmail "zombie"? processes will start to accumulate, probably this is
  related to issue. I guess any of these entries are related to the launch
  of a /home/p/test3.sh command
$> ps aux | grep mail
ps aux | grep mail
p        385  0.0  0.1 22704  5376 ?      Is    4:54PM 0:00.54 sendmail -FCronD p        414  0.0  0.1 22708  5380 ?      Is    4:56PM 0:00.36 sendmail -FCronD p        808  0.0  0.1 22708  5384 ?      Is    4:57PM 0:00.44 sendmail -FCronD p       1621  0.0  0.1 22708  5388 ?      Is    4:42PM 0:00.41 sendmail -FCronD p       1720  0.0  0.1 22708  5392 ?      Is    4:43PM 0:00.37 sendmail -FCronD
....

. Afte a while some wrong mail will start to appear
  when 2 mail arrive in the same minute it is a good signal
  one of the two is about "test3.sh", so it should not be there.
$> mail
----
 U  5 root@arm64.localdoma  Mon Jul 22 16:49   4/700   "Cron <p@arm64> /home/p/t U  6 root@arm64.localdoma  Mon Jul 22 17:04   4/700   "Cron <p@arm64> /home/p/t U  7 root@arm64.localdoma  Mon Jul 22 17:05   4/700   "Cron <p@arm64> /home/p/t U  8 root@arm64.localdoma  Mon Jul 22 17:06   4/700   "Cron <p@arm64> /home/p/t *** >N  9 root@arm64.localdoma  Mon Jul 22 17:07   3/690 "Cron <p@arm64> /home/p/t *** N 10 root@arm64.localdoma  Mon Jul 22 17:07   3/689   "Cron <p@arm64> /home/p/t N 11 root@arm64.localdoma  Mon Jul 22 17:08   3/690   "Cron <p@arm64> /home/p/t
----

. Indeed, opening mail (10) i get
---- mail-10 ----------------
Message 10:
From p@arm64.localdomain  Mon Jul 22 17:07:03 2024
X-Original-To: p
Delivered-To: p@arm64.localdomain
From: root@arm64.localdomain (Cron Daemon)
To: p@arm64.localdomain
Subject: Cron <p@arm64> /home/p/test3.sh
Auto-Submitted: auto-generated
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/p>
X-Cron-Env: <PATH=/usr/bin:/bin:/usr/pkg/bin:/usr/local/bin>
X-Cron-Env: <LOGNAME=p>
X-Cron-Env: <USER=p>
Date: Mon, 22 Jul 2024 17:07:03 +0200 (CEST)

test3: write something and quit.
--------------------------------------

. This mail should have never arrived, test3.sh does not generate errors

==================================
=== Requested test =====
==================================

. I stop cron
#> /etc/rc.d/cron stop

. I re-run cron as requested
#> /usr/sbin/cron -x proc
debug flags enabled: proc
[2490] cron started
[2490] do_command(/home/p/test4.sh , (p,1000,100))
[2490] main process returning to work
[2490] do_command(/home/p/test3.sh, (p,1000,100))
[2490] main process returning to work
[3145] child_process('/home/p/test4.sh ')
[3274] child_process('/home/p/test3.sh')
[839] grandchild process vfork()'ed
[840] grandchild process vfork()'ed
log_it: (p 839) CMD START (/home/p/test4.sh )
log_it: (p 840) CMD START (/home/p/test3.sh)
[3145] child continues, closing pipes
[3274] child continues, closing pipes
[3274] child reading output from grandchild
[3145] child reading output from grandchild
[3274] got data (74:t) from grandchild
[3145] got data (74:t) from grandchild
[3274] aborting pipe to mail
[3145] closing pipe to mail
[2490] sigchld...pid #3274 died, stat=0
[2490] sigchld...no dead kids
[3145] got EOF from grandchild
log_it: (p 3145) CMD FINISH (/home/p/test4.sh )
[3145] child process done (rc=0), exiting
[2490] sigchld...pid #3145 died, stat=0
[2490] sigchld...no children
....
================================


Bye
Nicola


On Sun-21-Jul-2024 21:50, Christos Zoulas wrote:
The following reply was made to PR bin/58408; it has been noted by GNATS.

From: Christos Zoulas <christos%zoulas.com@localhost>
To: gnats-bugs%netbsd.org@localhost
Cc: gnats-admin%netbsd.org@localhost,
  netbsd-bugs%netbsd.org@localhost
Subject: Re: bin/58408: cron ignores parameter "-n" in crontab
Date: Sun, 21 Jul 2024 15:45:07 -0400

  I just tried your example and it worked as expected
log_it: (christos 5384) CMD START (/u/christos/cron1)
  log_it: (christos 15992) CMD START (/u/christos/cron2)
  [4179] child continues, closing pipes
  [4179] child reading output from grandchild
  [13945] child continues, closing pipes
  [13945] child reading output from grandchild
  [7886] child continues, closing pipes
  [7886] child reading output from grandchild
  [4179] got EOF from grandchild [0]
  log_it: (christos 4179) CMD FINISH (/usr/bin/true)
  [4179] child process done (rc=3D0), exiting
  [20135] sigchld...pid #4179 died, stat=3D0
  [20135] sigchld...no dead kids
  [7886] got data (77:w) from grandchild
  [7886] aborting pipe to mail
  [13945] got data (77:w) from grandchild
  [13945] closing pipe to mail
  [13945] got EOF from grandchild [0]
  log_it: (christos 13945) CMD FINISH (/u/christos/cron2)
  [13945] child process done (rc=3D0), exiting
  [20135] sigchld...pid #13945 died, stat=3D0
  [20135] sigchld...no dead kids
you can try running cron -x proc christos > On Jul 9, 2024, at 3:35=E2=80=AFAM, nmingotti%gmail.com@localhost wrote:
  >=20
  >> Number:         58408
  >> Category:       bin
  >> Synopsis:       cron ignores parameter "-n" in crontab
  >> Confidential:   no
  >> Severity:       non-critical
  >> Priority:       medium
  >> Responsible:    bin-bug-people
  >> State:          open
  >> Class:          sw-bug
  >> Submitter-Id:   net
  >> Arrival-Date:   Tue Jul 09 07:35:00 +0000 2024
  >> Originator:     Dr. Nicola Mingotti
  >> Release:        10.0
  >> Organization:
  > Borghi SRL
  >> Environment:
  > NetBSD pulce4 10.0 NetBSD 10.0 (GENERIC) #0: Thu Mar 28 08:33:33 UTC =
  2024  =
  mkrepro%mkrepro.NetBSD.org@localhost:/usr/src/sys/arch/evbarm/compile/GENERIC =
  evbarm
  >=20
  >> Description:
  > According to man page crontab (5), if the modifier '-n' is used before =
  a command no mail should be sent on successful run. This is not the =
  case, parameter '-n' is ignored. Example below.=20
  >=20
  >=20
  >=20
  >=20
  >> How-To-Repeat:
  >=20
  > ---- /home/p/bin/test3.sh ----------
  > #!/bin/sh
  > echo "test3.sh -- `date` " >> /home/p/bin/test.log
  > echo "write something and quit. "
  > exit 0
  > ------------------------------------
  >=20
  > ---- /home/p/bin/test4.sh ----------
  > #!/bin/sh
  > echo "test4.sh -- `date` " >> /home/p/bin/test.log
  > echo "write something and fail"
  > exit 1
  > ------------------------------------
  >=20
  > p@pulce4 $> crontab -l=20
  > -----------
  > #
  > #minute hour    mday    month   wday    command
  > */1     *       *       *       *        -n /home/p/bin/test3.sh
  > */1     *       *       *       *        -n /home/p/bin/test4.sh
  > -----------
  >=20
  > . wait a bit
  > p@pulce4> mail=20
  > ----
  > N 14 root@pulce4.localdom  Tue Jul  9 08:55   3/695   "Cron <p@pulce4> =
  /home/p/bin/test3.sh"
  > N 15 root@pulce4.localdom  Tue Jul  9 08:56   3/693   "Cron <p@pulce4> =
  /home/p/bin/test4.sh"
  > N 16 root@pulce4.localdom  Tue Jul  9 08:56   3/695   "Cron <p@pulce4> =
  /home/p/bin/test3.sh"
  > N 17 root@pulce4.localdom  Tue Jul  9 08:57   3/693   "Cron <p@pulce4> =
  /home/p/bin/test4.sh"
  > N 18 root@pulce4.localdom  Tue Jul  9 08:57   3/695   "Cron <p@pulce4> =
  /home/p/bin/test3.sh"
  > N 19 root@pulce4.localdom  Tue Jul  9 08:58   3/693   "Cron <p@pulce4> =
  /home/p/bin/test4.sh"
  > N 20 root@pulce4.localdom  Tue Jul  9 08:58   3/695   "Cron <p@pulce4> =
  /home/p/bin/test3.sh"
  > N 21 root@pulce4.localdom  Tue Jul  9 08:59   3/693   "Cron <p@pulce4> =
  /home/p/bin/test4.sh"
  > N 22 root@pulce4.localdom  Tue Jul  9 08:59   3/695   "Cron <p@pulce4> =
  /home/p/bin/test3.sh"
  > ----
  >=20
  >=20
  >=20
  >=20
  >=20
  >=20
  >> Fix:
  >=20



Home | Main Index | Thread Index | Old Index