How to Schedule Jobs in Fedora 38 with systemd

Systemd is a system and service manager for Linux, which provides a number of features, including job scheduling. In this blog post, we will show you how to schedule jobs in Fedora 38 using systemd.

1. Create a service file

The first step is to create a service file for your job. This file will tell systemd how to run your job. The service file should be placed in the /etc/systemd/system/ directory.

The following is an example of a service file for a job that runs a script called myscript.sh every day at 04:00

[Unit]
Description=MyScript Job

[Service]
Type=simple
ExecStart=/path/to/myscript.sh

[Install]
WantedBy=multi-user.target

Replace /path/to/myscript.sh with the actual path to your script.

2. Create a timer file in the same directory with the following content:

[Unit]
Description=MyScript Timer

[Timer]
OnCalendar=*-*-* 04:00:00

[Install]
WantedBy=timers.target

The OnCalendar option specifies when the job should run, in the format YYYY-MM-DD HH:MM:SS. In this case, we’re running the job at 4:00 AM every day.

Save the files and reload the systemd daemon with sudo systemctl daemon-reload. Enable the timer to start automatically at boot time, and start the timer with sudo systemctl start myscript.timer.

Finally, verify that the timer and job are running with sudo systemctl list-timers myscript.timer and sudo systemctl status myscript.service.

Your job is now scheduled to run automatically at 4:00 AM every day. You can modify the myscript.service and myscript.timer files to change the scheduling interval or other job settings as needed.

3. Reload the systemd daemon

Once you have created the service file, you need to reload the systemd daemon so that it can be aware of the new job. You can do this by running the following command:

sudo systemctl daemon-reload

4. Enable the job to start automatically at boot time

You can enable the job to start automatically at boot time by running the following command:

sudo systemctl enable myscript.service

5. Start the job

You can start the job immediately by running the following command:

sudo systemctl start myscript.service

6. Verify that the job is running

You can verify that the job is running by running the following command:

sudo systemctl status myscript.service

This will display the current status of the job, including whether it’s running, stopped, or failed.

That’s it! Your job is now scheduled to run automatically at the specified time. You can modify the myscript.service file to change the scheduling interval or other job settings as needed.

Leave a Comment

Your email address will not be published. Required fields are marked *