14 Scheduling jobs - kumar159man/MyShellLearning GitHub Wiki
Execution of shell script can be scheduled through at and crontab
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$
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
- minute-> 0-59
- hour-> 0-23
- day->1-31
- month->1-12
- weekday->0-6 0==Sunday.....6==Saturday
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
Lists the cronjob
myubuntu@myubuntu-VirtualBox:~/Desktop/myShellScriptBackup$ crontab -l * * * * * /home/myubuntu/Desktop/shellScripts/backup.sh
removes all the cronjobs
myubuntu@myubuntu-VirtualBox:~/Desktop/myShellScriptBackup$ crontab -r myubuntu@myubuntu-VirtualBox:~/Desktop/myShellScriptBackup$ crontab -l no crontab for myubuntu
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