3

I'm trying to zip a directory and copy it over as a backup. I'm new to Linux to so I followed guides as best as I could, but when trying

systemctl status cron 

I get the following error:

Apr 27 13:34:01 mc-server cron[950]: Error: bad username; while reading /etc/crontab 

Running the command standalone works as expected (the 3 minute timer was only for testing purposes).

This is the full crontab:

# /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields, # that none of the other crontabs do. SHELL=/bin/sh # You can also override PATH, but by default, newer versions inherit it from the environment #PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) */3 * * * * root zip -r -q /mnt/truenas/Ozone/Backup_$(TZ="Europe/Berlin" date "+%A_%d.%m.%y_%H;%M").zip /home/rexor/mcserver # 
4
  • Can you check the username's listed in /etc/cron*/* to confirm that all accounts in those files exist on your server? Commented Apr 27, 2024 at 19:21
  • @doneal24 you mean in /etc/cron.d/*, right? None of the others should have user names as far as I know. Rexor, [;ease edit your question and add the output of sudo grep -Pv '^\s*#' /etc/crontab /etc/cron.d/* | awk '{print $6}' | sort -u. That should show us all usernames. Commented Apr 27, 2024 at 19:31
  • 2
    Does the error go away if you escape each % as \%? If so, this is a duplicate of unix.stackexchange.com/questions/29578/… Commented Apr 27, 2024 at 19:34
  • @terdon Yes, only the files under /etc/cron.d have the users specified. My mistake. Commented Apr 27, 2024 at 19:41

1 Answer 1

1

From man 5 crontab:

The ``sixth'' field (the rest of the line) specifies the command to be run. The entire command portion of the line, up to a newline or % character, will be executed by /bin/sh or by the shell specified in the SHELL variable of the crontab file. Percent-signs (%) in the command, unless escaped with backslash (\), will be changed into newline characters, and all data after the first % will be sent to the command as standard input. There is no way to split a single command line onto multiple lines, like the shell's trailing "\".

I'm not sure why this causes the mentioned error, but try escaping the '%' in your commands and see if it helps:

*/3 * * * * root zip -r -q /mnt/truenas/Ozone/Backup_$(TZ="Europe/Berlin" date "+\%A_\%d.\%m.\%y_\%H;\%M").zip /home/rexor/mcserver 
2
  • 1
    Meep meep. I read it too fast. You are correct and I'll remove my comment above. Ideally, you would actually test it to make sure you get the same errors and then see if escaping the %'s solves it. Commented Apr 27, 2024 at 20:17
  • thank you. escaping all the % did indeed fix my issue. I'm also unsure why this creates the error message it does, but it's definitely working fine now. Commented Apr 27, 2024 at 21:06

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.