crontab
maintain crontab files for individual users (Vixie Cron)
see also :
cron
Synopsis
crontab [
-u user ] file
crontab [ -u user ] [ -i ] { -e | -l
| -r }
add an example, a script, a trick and tips
examples
source
How to execute shell script via crontab?
4 hypothesis:
-
the cron daemon is not running (do a ps axfww | grep
cron
and check)
-
the notify-send is trying to send output to a terminal, or an
X session -- but it is ran from within the cron
environment and it does not know "who to talk to", so to
speak.
-
your script is not executable
-
the home/
path in the crontab script is relative
to the user the scripts gets executed as. Try using the full
path
source
Only email on cron errors for jobs in cron.daily, cron.hourly, etc
You should send successful email notifications to
/dev/null
so they disappear.
But you want to see unsuccessful email notifications.
This means you need to first direct stdout
to
/dev/null
and then direct /dev/stderr
to stdout
try changing the redirection part of your cronjobs to
>/dev/null 2>&1
See this link
source
Difference between /etc/crontab and "crontab -e"
One is the system crontab and can only be edited by root, and the
other is the user crontab and can be edited by a user and exists
per user.
source
From what context is a cron task executed?
I bet you could just give the user a shell, just limit down the
ability to access it remotely and it's permissions.
Cron tasks run under the users who made the Cron task, so that's
why it runs as root
.
source
How do I make crontab generate a unique log each time it runs a job?
You can use the date
command to generate a
unique(ish) filename:
/usr/local/bin/python2.7 /home/scripts/script.py > /home/scripts/logs/"`date +\%d\%m\%y_\%H\%M\%S`".log 2>&1
EDIT: Make sure to escape the percentage signs
(\%
). They have a special
meaning in cron and the crontab will return an error.
That way, a new log file (called
<date_time>.log
) will be created every time
your job runs.
$ date; touch "`date +%d%m%y_%H%M%S`.log"
Tue Sep 25 04:39:25 CEST 2012
$ ls *log
250912_043925.log
Assuming your script does not run more often than once a second
(which it can't if you are running a simple crontab), you should
be fine.
If, as suggested in the comments, your script is run by different
users, you can add the user name to the log file's name:
/usr/local/bin/python2.7 /home/scripts/script.py > /home/scripts/logs/$(echo -n `whoami`_`date +\%d\%m\%y_\%H\%M\%S`).log 2>&1
source
system-wide crontab vs. user crontab to shutdown pc
In theory either should work. I think you will find the
difference is in the PATH. Your version may differ, but in my
/etc/crontab there is a PATH line at the top which includes /sbin
in it (and my shutdown is in /sbin).
I think you will find that when CRON is executed for the root
user it does not have a path associated with it, so it is not
working. Change the command to
30 2 * * 3 root /sbin/shutdown -h now
And I suspect that will solve your problem.
source
How to create folders according to date in Linux?
Use the -p
option to mkdir to create more than one
element of the path at the time, and use a for-loop to avoid
repeating yourself:
sh -c '
for a in abcd wxyz; do
for b in dammi harrami; do
mkdir -p /home/$a/$b/$(date +%Y-%m)/$(date +%d);
done;
done
'
(line-breaks to show logical structure; could be all on one line)
source
Cron ignoring an update to crontab
Check the manpage on your system for crontab(5) (man 5
crontab
), especially under the "EXAMPLE SYSTEM CRON FILE"
section. Only the /etc/crontab file includes a username field.
Non-system user crontabs do not include this field. If you want
to edit /etc/crontab, then use a text editor, not the crontab(1)
command.
source
How can I change the directory a command thinks it is running in?
Why does using cd
in crontab scare you?
Note that if you want to just temporarily change directory and
then come back, you can use pushd
and
popd
source
Do jobs in root's crontab still execute when logged in as another user?
Yes, root's cron jobs will still run even if you're logged in as
another user.
source
crontabs hour specification */1 is that the same as *
Yes those are the same. From the man page (man 5
crontab
):
A field may be an asterisk (*), which always stands for ``first-last''.
[...]
Ranges can include "steps", so "1-9/2" is the same as "1,3,5,7,9".
Therefore */x
means the whole range (depending on
the position of the *
) covered with steps of
x
.
In your case, for the "hour" position, the first-to-last range is
0 to 23. So *
= 0-23
, and
*/1
= "0,1,2,...,22,23"
, which is
exactly the same.
source
Why crontab command is not available to me even I am root
ls: cannot access /usr/bin/crontab: No such file or directory
I am able to see that file when ever I tried the locate command
In that case crontab is not installed anymore.
Locate does not search the filesystem. It looks in a database
which is usually generated once per day (often around 3AM). If
the the contab binary was present when locate last updated itself
then it will show up with locate. Even if it got removed
afterward.
In your case something deleted the that file, or uninstalled the
package responsive for crontab.
source
Why cron saves at /root, when should at /var/www?
The querylog.log
file is saved in the
/root
directory because that's exactly where you
have specified it should be saved.
If you want to change its location, just edit the path to your
desired location, e.g. /var/www/querylog.log
.
source
Why are some of my cron jobs not sending deamon emails?
After you redirect the standard output of run.sh
to
/root/backup_scripts/new_scripts/$(date).run.log
there is only the error output left to redirect to standard out.
Could it be that run.sh
just doesn't produce any
errors?
If you want to see the standard output of run.sh
use
tee
to save it to file, too.
45 03 * * * /root/backup_scripts/new_scripts/run.sh | tee "/root/backup_scripts/new_scripts/$(date).run.log" 2>&1
description
crontab
is the program used to install, deinstall or list the tables
used to drive the cron(8) daemon in Vixie Cron. Each
user can have their own crontab, and though these are files
in /var/spool/cron/crontabs, they are not intended to be
edited directly.
If the
/etc/cron.allow file exists, then you must be listed
(one user per line) therein in order to be allowed to use
this command. If the /etc/cron.allow file does not
exist but the /etc/cron.deny file does exist, then
you must not be listed in the /etc/cron.deny
file in order to use this command.
If neither of
these files exists, then depending on site-dependent
configuration parameters, only the super user will be
allowed to use this command, or all users will be able to
use this command.
If both files
exist then /etc/cron.allow takes precedence. Which
means that /etc/cron.deny is not considered and your
user must be listed in /etc/cron.allow in order to be
able to use the crontab.
Regardless of
the existance of any of these files, the root administrative
user is always allowed to setup a crontab. For standard
Debian systems, all users may use this command.
If the
-u option is given, it specifies the name of the user
whose crontab is to be used (when listing) or modified (when
editing). If this option is not given, crontab
examines "your" crontab, i.e., the crontab of the
person executing the command. Note that su(8) can
confuse crontab and that if you are running inside of
su(8) you should always use the -u option for
safety’s sake.
The first form
of this command is used to install a new crontab from some
named file or standard input if the pseudo-filename
’’-’’ is given.
The -l
option causes the current crontab to be displayed on
standard output. See the note under DEBIAN SPECIFIC
below.
The -r
option causes the current crontab to be removed.
The -e
option is used to edit the current crontab using the editor
specified by the VISUAL or
EDITOR environment variables. After you exit
from the editor, the modified crontab will be installed
automatically. If neither of the environment variables is
defined, then the default editor /usr/bin/editor is
used.
The -i
option modifies the -r option to prompt the user for a
’y/Y’ response before actually removing the
crontab.
debian specific
The "out-of-the-box" behaviour for crontab -l is to
display the three line "DO NOT EDIT THIS FILE" header that is
placed at the beginning of the crontab when it is installed. The
problem is that it makes the sequence
crontab -l | crontab -
non-idempotent -- you keep adding copies of the header. This
causes pain to scripts that use sed to edit a crontab. Therefore,
the default behaviour of the -l option has been changed to
not output such header. You may obtain the original behaviour by
setting the environment variable CRONTAB_NOHEADER to ’N’,
which will cause the crontab -l command to emit the
extraneous header.
diagnostics
A fairly informative usage message appears if you run it with a
bad command line.
cron requires that each entry in a crontab end in a newline
character. If the last entry in a crontab is missing the newline,
cron will consider the crontab (at least partially) broken and
refuse to install it.
files
/etc/cron.allow
/etc/cron.deny
/var/spool/cron/crontabs
There is one file for each user’s crontab under the
/var/spool/cron/crontabs directory. Users are not allowed to edit
the files under that directory directly to ensure that only users
allowed by the system to run periodic tasks can add them, and
only syntactically correct crontabs will be written there. This
is enforced by having the directory writable only by the
crontab group and configuring crontab command with
the setgid bid set for that specific group.
standards
The crontab command conforms to IEEE Std1003.2-1992
(’’POSIX’’). This new command syntax differs from previous
versions of Vixie Cron, as well as from the classic SVR3 syntax.
see also
cron tab,
cron
author
Paul Vixie
<paul[:at:]vix[:dot:]com> is the author of cron and
original creator of this manual page. This page has also
been modified for Debian by Steve Greenland, Javier
Fernandez-Sanguino and Christian Kastner.