I have a very simple shell script I need to run as a cronjob but I can't get even the test scripts to run. Here's and example script:
/home/myUser/scripts/test.sh
#!/bin/bash
touch file.txt
crontab:
* * * * * /home/myUser/scripts/test.sh
The script runs fine from the terminal but can't get it to run as a cronjob. So far I've tried these in crontab:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* * * * * /bin/bash /home/myUser/scripts/test.sh
And this in the the script file:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/myUser/scripts
From what I've gathered the solution might be in the PATH variable but I can't figure out what it is since my understanding is very limited at this point. So my question is, how do I get my scripts to run as cronjobs?
EDIT: the file has rwx permissions for all users. This is just for testing purposes.
EDIT: cronjobs such as * * * * * touch /home/myUser/scripts/test.txt
work but it wont run scripts.
What directory is file.txt in? cron runs jobs in your home directory, so unless your script
cd
s somewhere else, that's where it's going to look for/create file.txt.EDIT: When you refer to a file without specifying its full path (e.g.
file.txt
, as opposed to the full path/home/myUser/scripts/file.txt
) in shell, it's taken that you're referring to a file in your current working directory. When you run a script (whether interactively or via crontab), the script's working directory has nothing at all to do with the location of the script itself; instead, it's inherited from whatever ran the script.Thus, if you
cd
(change working directory) to the directory the script's in and then run it,file.txt
will refer to a file in the same directory as the script. But if you don'tcd
there first,file.txt
will refer to a file in whatever directory you happen to be in when you ran the script. For instance, if your home directory is /home/myUser, and you open a new shell and immediately run the script (asscripts/test.sh
or/home/myUser/scripts/test.sh
;./test.sh
won't work), it'll touch the file /home/myUser/file.txt because /home/myUser is your current working directory (and therefore the script's).When you run a script from
cron
, it does essentially the same thing: it runs it with the working directory set to your home directory. Thus all file references in the script are taken relative to your home directory, unless the scriptcd
s somewhere else or specifies an absolute path to the file.It should run properly at cron also. Please check below things.
1- You are editing proper file to set cron.
2- You have given proper permission(execute permission) to script mean your script is executable.
Try,
cron as:
And you can confirm this by:
Specify complete path and grant proper permission to scriptfile. I tried following script file to run through cron:
And crontab command is
It worked for me.
The easiest way would be to use a GUI:
For Gnome use gnome-schedule (universe)
For KDE use kde-config-cron
But if you use a headless linux or don´t want GUI´s you may use:
If you type it into Terminal you´ll get a table.
You have to insert your cronjobs now.
Format a job like this:
There are some shorts, too (if you don´t want the *):
If you want to use the shorts as cron (because they don´t work or so):