-
Notifications
You must be signed in to change notification settings - Fork 0
/
107-2-Automate-system-administration-tasks-by-scheduling-jobs
207 lines (166 loc) · 8.61 KB
/
107-2-Automate-system-administration-tasks-by-scheduling-jobs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
####################################################################
107.2 Automate system administration tasks by scheduling jobs
####################################################################
Candidates should be able to use cron or anacron to run jobs at regular intervals and to use at to run jobs at a specific time.
Key Knowledge Areas
& Manage cron and at jobs.
& Configure user access to cron and at services.
& Configure anacron.
################################
Terms and Utilities
################################
& /etc/cron.{d,daily,hourly,monthly,weekly}/
& /etc/at.deny
& /etc/at.allow
& /etc/crontab
& /etc/cron.allow
& /etc/cron.deny
& /var/spool/cron/
& crontab
& at
& atq
& atrm
& anacron
& /etc/anacrontab
################################
Crontab format
################################
Crontab files are responsible to run some commands on specific intervals. Each line has 5 fileds to specify the run time and whatever after it is considered the command to be run.
A B C D E command and arguments
filed Meaning values
A minute 0-59
B hour 0-23
C day of month 1-31
D month 1-12 (or names, see below)
E day of week 0-7 (0 or 7 is Sunday, or use names)
Each time field can be a * to indicate ANY. Also if you have @reboot or @daily instead of time fields, the command will be run once after the reboot or daily. Lets see some examples:
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# run at 2:15pm on the first of every month -- output mailed to paul
15 14 1 * * $HOME/bin/monthly
# run at 10 pm on weekdays, annoy Joe
0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%
23 0-23/2 * * * echo "run 23 minutes after midn, 2am, 4am ..., everyday"
5 4 * * sun echo "run at 5 after 4 every sunday"
*/5 * * * * echo "each 5 mintues"
42 8,18 * * 1-5 echo "8:42 and 18:42 and only on weekdays (monday till friday)"
@reboot echo "runs after the reboot"
Note: be careful about using a * on the first filed. That will run your cron on every minute!
Note: Use with care. Something like 42 8 1 1 0 runs ONLY IF 1st Of Jan is a Monday!
When a cron runs, the output will be emailed to the owner of the cron.
################################
user specific crons
################################
Cron is a linux service. To see your crons you can use crontab -l (list) and for editing it you can use crontab -e (edit) which will open the cron files with a special editor and will load your inserted crons (if they are correct) after wards.
The files will be saved at /var/spool/cron/tabs/ or `/var/spool/crontabs':
# cat /var/spool/cron/tabs/mojtaba
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.khObLu installed on Thu Oct 29 22:04:43 2015)
# (Cronie version 4.2)
* * * * * date >> /tmp/date.cron.txt
You should never edit these files directly; Use crontab -e instead.
################################
at
################################
We say that crontab runs commands on specific intervals but what will happen if you needed to run a command only once? Here at is your friend.
$ at now + 1 min
warning: commands will be executed using /bin/sh
at> touch /tmp/at
at> <EOT>
job 3 at Thu Oct 29 22:12:00 2015
Note: As always, at the end of input we press Ctrl+D
If you want to check what is in the queue you can use atq and then try atrm 4 to delete job number 4;
$ at teatime
warning: commands will be executed using /bin/sh
at> echo "tea time is 4pm"
at> <EOT>
job 4 at Fri Oct 30 16:00:00 2015
mojtaba@funlife:~$ at tomorrow
warning: commands will be executed using /bin/sh
at> echo "tomorrow this time"
at> <EOT>
job 5 at Fri Oct 30 22:15:00 2015
mojtaba@funlife:~$ at 17:30
warning: commands will be executed using /bin/sh
at> echo "this is the first 17:30"
at> <EOT>
job 6 at Fri Oct 30 17:30:00 2015
mojtaba@funlife:~$ atq
5 Fri Oct 30 22:15:00 2015 a mojtaba
4 Fri Oct 30 16:00:00 2015 a mojtaba
6 Fri Oct 30 17:30:00 2015 a mojtaba
mojtaba@funlife:~$ atrm 4
mojtaba@funlife:~$ atq
5 Fri Oct 30 22:15:00 2015 a mojtaba
6 Fri Oct 30 17:30:00 2015 a mojtaba
################################
system wide cron
################################
There is file called /etc/crontab. This looks like a normal user file opened with crontab -e but has one extra filed:
A B C D E USER command and arguments
This file should be edited with an editor directly and we can mention which user runs this commands.
# cat /etc/crontab
SHELL=/bin/sh
PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin
MAILTO=root
#
# check scripts in cron.hourly, cron.daily, cron.weekly, and cron.monthly
#
-*/15 * * * * root test -x /usr/lib/cron/run-crons && /usr/lib/cron/run-crons >/dev/null 2>&1
Note: Have a look at first two line. It configures the shell which will run the commands and the PATH variable plus who will get the output emails.
As you can see this default crontab runs other crons! They are hourly, daily, weekly and monthly crons.
####################################################################
System hourly, daliy, weekly, monthly, .. crons
####################################################################
We have some system level crontab files in /etc/cron.d/ too. In other words, whatever file which is copied there, will be treated just like /etc/crontab file (a system wide cron file). This make systems much cleaner and lets programs to copy one file there instead of editing the /etc/crontab.
$ sudo tree /etc/cron*
root's password:
/etc/cron.d
└── mdadm
/etc/cron.daily
├── google-chrome
├── mdadm
├── mlocate.cron
├── packagekit-background.cron
├── suse-clean_catman
├── suse.de-backup-rc.config
├── suse.de-backup-rpmdb
├── suse.de-check-battery
├── suse.de-cron-local
├── suse.de-snapper
└── suse-do_mandb
/etc/cron.deny [error opening dir]
/etc/cron.hourly
└── suse.de-snapper
/etc/cron.monthly
/etc/crontab [error opening dir]
/etc/cron.weekly
Lets have a look at one of the cron.d files:
$ cat /etc/cron.d/mdadm
#
# cron.d/mdadm - regular redundancy checks
#
# Start checking each month early in the morning.
# Continue each day until all done
PATH=/sbin:/usr/sbin:/bin:/usr/bin
0 1 * * 0 root source /etc/sysconfig/mdadm; [ -n "$MDADM_CHECK_DURATION" -a -x /usr/share/mdadm/mdcheck -a $(date +\%d) -le 7 ] && /usr/share/mdadm/mdcheck --duration "$MDADM_CHECK_DURATION"
0 1 * * 1-6 root source /etc/sysconfig/mdadm; [ -n "$MDADM_CHECK_DURATION" -a -x /usr/share/mdadm/mdcheck ] && /usr/share/mdadm/mdcheck --continue --duration "$MDADM_CHECK_DURATION"
But /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly is TOTALLY DIFFERENT. In these directories are actual executable scripts and files. The cron will run these files one a hour, one a day, once a week or once a month based on their directory names.
################################
anacron
################################
The difference between cron and anacron, is this:
If the system is down when the cron should run a task, that cron job wont run till the next occurrence! But anacron creates the timestamp each time a daily, weekly or monthly job runs. If the system boots up and find outs that one of the anacron jobs are missed, it will run it during the boot!
As you can see anacron is useful for important tasks. If you need to take a backup once a week it is better to use anacron instead of cron; or feeding your dog once a day using cron may lead to it staying hungry for a day if the system is down when he should be fed.
Note: anacron checks the timestamps at BOOT TIME and do not handle hourly crons.
################################
controlling access using files
################################
You have already seen files at /var/spool/cron/tabs/USERNAME. There are also 4 more files to control who can and can not use cron and at. The files are:
/etc/cron.allow
/etc/cron.deny
/etc/at.allow
/etc/at.deny
In most systems none of these files exist but if you create them, they will become active as follow:
file extension functionality
.allow ONLY users mentioned in this file are allowed to run this service. All other users will be denied
.deny Everybody can use the service except the users mentioned in this file