Geek Culture
Published in

Geek Culture

How to Automate Tasks in Linux

Introduction

Many of us love the Linux kernel 💙. It uses the Unix based terminal. it’s super customizable. We thus might choose to run Linux without a desktop environment like GNOME.
Linux works magic ✨ on older hardware and it’s lightweight. We don’t sell or advertise on Linux or have to struggle with a ton of desktop bloatware and its a great platform for back-end engineers.

Another productivity tip I leaned about, was setting up Cron Jobs to schedule time-based operations, to be executed automatically on my computer. These jobs can be for a variety of tasks, like backups of data or, in my special case, change the location of global tools like dotnet-ef by adding a line to my shell's configuration:

export PATH=$PATH:/snap/bin

Prerequisites

  • Installing the Cron daemon
  • The Job to be done

Cron is a time-based job scheduling daemon found in Unix-like operating systems, including Linux distributions. Almost every Linux distribution has some form of Cron installed by default. However, if you have a Debian Linux distro without Cron preinstalled, you can install it using the APT package manager.

Before installing any package on a Debian machine, update the computer’s local package database:

$ sudo apt update

Then install Cron with the following command:

$ sudo systemctl enable cronOutput Synchronizing state of cron.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable cron

Next, we write the script of the job we wish to automate in a bash file. below is the text of my script I use to change the location of dotnet-ef global tool in the shell configuration.

This file can be created in the text editor of your choice and saved as filename.sh in the root of your home folder. (In my case this is /home/nextwebb/Desktop). This script can be directly run in the terminal with sh filename.sh and it works correctly 😃.

Scheduling tasks using Crontabs

This exercise is done on the terminal using the crontab command with two flags, -l (list) and -e (edit) . Type the command crontab -e and choose from a number [1-4] to select the text editor of your choice, with your personal Cron file and write your Cron job. I'll select 1 because my default editor is Nano.

$ crontab -e

The Terminal enters into Editor mode with your personal Crontab file opened. As you can see, all the commands are shown at the bottom of the Terminal Window.

# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
m h dom mon dow command

Some Special Syntax

These are essentially shortcuts for the equivalent numeric schedule specified:

@hourly  -> 0 * * * *@daily  ->    0 0 * * *@weekly  ->    0 0 * * 0@monthly  ->    0 0 1 * *@yearly  ->    0 0 1 1 *

@reboot -> This shorthand will run whatever command follows it any time the server starts up

Returning back to the subject in question, in my case, I want the bash file filename.sh to be executed after a startup, within the crontab editor I type:

@reboot  /home/nextwebb/Desktop/filename.script

Once happy with your entry, you need to save it (Ctrl+s) and now press (Ctrl+x) and so exit back from the Editor to the Terminal. Keying in will now show your new Cron Job and you can confirm if all looks okay, or not.

$ crontab -l

It’s a super-simple way to run scripts on boot using Cron jobs.

Thanks for the audience and I hope you found this article helpful 🤗. feel free to reach out to Github, Twitter and LinkedIn. Do drop a like, comment, and share 😌.

For a detailed description of the Cron Job Syntax and Automated setups, have a look at Crontab Syntax Tutorial

Happy Scheduling 😉.

Originally published at https://blog.nextwebb.tech.

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Peterson oaikhenah

Peterson oaikhenah

I’m a Software Engineer 👩‍💻, an avid learner 👨‍🎓 and a community leader 🥑.