14 Scheduling jobs - kumar159man/MyShellLearning GitHub Wiki

Scheduling jobs

Execution of shell script can be scheduled through at and crontab

at command

at command can be used for scheduling a job which needs to be executed for one time

Running a shell script to take backup through at command

#!/usr/bin/bash
[[ -e /home/myubuntu/Desktop/myShellScriptBackup ]] || mkdir /home/myubuntu/Desktop/myShellScriptBackup
tar -cvf /home/myubuntu/Desktop/myShellScriptBackup/shellScriptBackup_$(date +%d-%b-%y-%H:%M:%S).tar.gz /home/myubuntu/Desktop/shellScripts/
myubuntu@myubuntu-VirtualBox:~/Desktop/shellScripts$ at 14:40
warning: commands will be executed using /bin/sh
at> bash backup.sh
at> <EOT>
job 3 at Mon Jul 27 14:40:00 2020

after giving shell type and script name press Ctrl+d

myubuntu@myubuntu-VirtualBox:~/Desktop/myShellScriptBackup$ ls
shellScriptBackup_27-Jul-20-14:40:00.tar.gz

Script ran and backup was created.

Listing queue

myubuntu@myubuntu-VirtualBox:~/Desktop/myShellScriptBackup$ atq
4	Tue Jul 28 03:00:00 2020 a myubuntu
5	Tue Jul 28 03:15:00 2020 a myubuntu

Remove a job

myubuntu@myubuntu-VirtualBox:~/Desktop/myShellScriptBackup$ atq
4	Tue Jul 28 03:00:00 2020 a myubuntu
5	Tue Jul 28 03:15:00 2020 a myubuntu
myubuntu@myubuntu-VirtualBox:~/Desktop/myShellScriptBackup$ atrm 4
myubuntu@myubuntu-VirtualBox:~/Desktop/myShellScriptBackup$ atq
5	Tue Jul 28 03:15:00 2020 a myubuntu
myubuntu@myubuntu-VirtualBox:~/Desktop/myShellScriptBackup$ 

Crontabs

Used for running specific task for specific intervals of time

  • Syntax minute(s) hour(s) day(s) month(s) weekday(s) command/absolute path of the shell script

values of attributes for running cronjob

  • minute-> 0-59
  • hour-> 0-23
  • day->1-31
  • month->1-12
  • weekday->0-6 0==Sunday.....6==Saturday

Crontab -e

This command is used to create a cronjob

 * * * * * /home/myubuntu/Desktop/shellScripts/backup.sh

The above command will run the shell script at every minute

myubuntu@myubuntu-VirtualBox:~/Desktop/myShellScriptBackup$ date
Monday 27 July 2020 03:33:18 PM IST
myubuntu@myubuntu-VirtualBox:~/Desktop/myShellScriptBackup$ ls
shellScriptBackup_27-Jul-20-14:40:00.tar.gz  shellScriptBackup_27-Jul-20-15:33:01.tar.gz
myubuntu@myubuntu-VirtualBox:~/Desktop/myShellScriptBackup$ ls -ltr
total 128
-rw-rw-r-- 1 myubuntu myubuntu 30720 Jul 27 14:40 shellScriptBackup_27-Jul-20-14:40:00.tar.gz
-rw-rw-r-- 1 myubuntu myubuntu 30720 Jul 27 15:33 shellScriptBackup_27-Jul-20-15:33:01.tar.gz
-rw-rw-r-- 1 myubuntu myubuntu 30720 Jul 27 15:34 shellScriptBackup_27-Jul-20-15:34:01.tar.gz
-rw-rw-r-- 1 myubuntu myubuntu 30720 Jul 27 15:35 shellScriptBackup_27-Jul-20-15:35:01.tar.gz
myubuntu@myubuntu-VirtualBox:~/Desktop/myShellScriptBackup$ 
  • Running the job every hour 0 * * * * /home/myubuntu/Desktop/shellScripts/backup.sh

  • Running the job 9 am in morning anf 9 pm 0 9,21 * * * /home/myubuntu/Desktop/shellScripts/backup.sh

  • Running the job on weekend 0 0 * * 0,6 /home/myubuntu/Desktop/shellScripts/backup.sh

  • Running a job yearly once 0 0 1 1 * /home/myubuntu/Desktop/shellScripts/backup.sh can also be interpreted as @yearly /home/myubuntu/Desktop/shellScripts/backup.sh Similarly we can use @monthly, @weekly, @daily, @hourly, @reboot

crontab -l

Lists the cronjob

myubuntu@myubuntu-VirtualBox:~/Desktop/myShellScriptBackup$ crontab -l
* * * * * /home/myubuntu/Desktop/shellScripts/backup.sh

crontab -r

removes all the cronjobs

myubuntu@myubuntu-VirtualBox:~/Desktop/myShellScriptBackup$ crontab -r
myubuntu@myubuntu-VirtualBox:~/Desktop/myShellScriptBackup$ crontab -l
no crontab for myubuntu

Trigger email when memory threshold is reached

Shell script to do this

#!/usr/bin/bash
to="[email protected]"
threshold_mem=4700
current_mem_usage=$(free -mt | grep -E "Total:" | awk '{print $4}')
if [[ current_mem_usage -lt threshold_mem ]]
then
     echo "Current Memory is $current_mem_usage" | /usr/bin/mail -s "Memory Usage $(date)" $to
fi

Run this as cron job wit * * * * * memoryAlet.sh

⚠️ **GitHub.com Fallback** ⚠️