this post was submitted on 17 Aug 2023
19 points (100.0% liked)

Linux

48248 readers
842 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS
 

Hello everyone!

I'm running a few different services off of my Ubuntu VM on ProxMox, and they've all been running great for about 6 months now. However, I'm trying to setup some better backups and such of individual services, and I wrote a bash script to do that for me and delete older backups once I accumulate enough.

All of that works 100% fine. Like absolutely no issues with the script when I run it myself. However, I can not for the life of me get crontab to run it.

If I run sudo ./folder/directory/backup.sh then everything runs perfectly. However, if I setup my crontab with 0 * * * * ./folder/directory/backup.sh I get absolutely nothing.

I have also tried setting the crontab with sudo, sh, sudo sh, and both combinations without the dot in front of the path to the shell script.

Does anyone have any idea what I am doing wrong?

Thank you so much for any help

Update: I have edited /etc/crontab with the following 0 * * * * * root /mnt/nas/freshrss/backups/backup.sh. After waiting for the crontab to fire off, nothing happened. Still not really sure what's going on.

you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 2 points 1 year ago (2 children)

That's probably the issue, crontab has another workdir, so calling the script with a relative path won't work.

Just use the full path to the script, something like /home/username/folder/directory/backup.sh and it'll probably just work.

[–] theRealBassist 2 points 1 year ago (2 children)

I have edited /etc/crontab with the following 0 * * * * * root /mnt/nas/freshrss/backups/backup.sh. After waiting for the crontab to fire off, nothing happened.

[–] [email protected] 4 points 1 year ago* (last edited 1 year ago)

Too many numbers/stars

MM HH DAY MON DAYOFWEEK USER /full/path/to/script >/path/to/logfile.log 2>&1

(The log part is optional)

[–] [email protected] 3 points 1 year ago

As @[email protected] mentioned, you have too many time fields.

[–] theRealBassist 1 points 1 year ago (1 children)

So, right now I'm trying the system crontab instead of my user crontab.

Just to reiterate from my post, however, I have tried the full path. I was giving example paths. I should have been more explicit that by just "using dot" I meant using relative and absolute paths.

All paths have been full paths from the get go, though I did try cd-ing into the folder and running it with a relative path. My hope at this point is that it's somehow a permissions issue as my storage setup is a bit odd with TrueNAS Scale running as a VM on ProxMox. Permissions with docker are usually hell, and I have to run literally everything that touches my NAS as root to get the permissions to play nicely, so it would make sense here that it's just the permissions being upset and preventing access to the files.

I set a backup to run on the hour, so I'll report back with whatever happens.

[–] [email protected] 3 points 1 year ago (1 children)

So, right now I’m trying the system crontab instead of my user crontab.

Yes, you should never use sudo inside a users crontab. If you want to run as root then use the system crontab.

I would also encourage looking at systemd timers. They are more verbose then crontab, but far easier to debug and see what is going on. They work off services so automatically log to journald like all other services and you can easily see when they last ran, if it was successful and when it will next run with systemctl list-timers. All things you can do with cron, but requires a lot more setup yourself.

[–] theRealBassist 2 points 1 year ago (1 children)

Yes, you should never use sudo inside a users crontab. If you want to run as root then use the system crontab.

I appreciate the advice! I had never really heard about the distinction between the system crontab and user crontabs. While it makes sense in retrospect, I am entirely self-taught about this stuff, and nowhere I had looked had ever mentioned that there were two separate crontabs.

I would also encourage looking at systemd timers

Do you happen to know of a good resource to learn about those off the top of your head? I appreciate the suggestion!

[–] [email protected] 2 points 1 year ago

The arch wiki is always a good place to look. There are a lot of introduction blog posts around that I have not read so cannot recommend - but plenty to look at if you need more information or a more beginner friendly guide than the arch wiki.

The freedesktop manuals are also worth a look at for more advanced stuff you can do with them - but are not really required for basic things. They just detail all the settings you have available and are much more of a reference than a guide.