Sunday

Run Two Systemd Services Alternately

To achieve the desired sequence where `app1` starts, runs for 10 minutes, then `app2` starts and runs for 10 minutes, and this cycle repeats, you can create two separate timer units and services, one for each application, and use a cyclic approach. Here's how you can do it:


1. Create two timer units, one for each application, with cyclic activation:


   `myapp1.timer`:

   ```ini

   [Unit]

   Description=Timer for My Application 1


   [Timer]

   OnBootSec=10min

   OnUnitInactiveSec=10min


   [Install]

   WantedBy=timers.target

   ```


   `myapp2.timer`:

   ```ini

   [Unit]

   Description=Timer for My Application 2


   [Timer]

   OnBootSec=20min

   OnUnitInactiveSec=10min


   [Install]

   WantedBy=timers.target

   ```


In this configuration, `myapp1.timer` is set to trigger `myapp1.service` 10 minutes after boot and every 10 minutes after it becomes inactive. `myapp2.timer` is set to trigger `myapp2.service` 20 minutes after boot and every 10 minutes after it becomes inactive.


2. Create two service units, one for each application:


   `myapp1.service`:

   ```ini

   [Unit]

   Description=My Application 1


   [Service]

   ExecStart=/path/to/app1

   Restart=always


   [Install]

   WantedBy=multi-user.target

   ```


   `myapp2.service`:

   ```ini

   [Unit]

   Description=My Application 2


   [Service]

   ExecStart=/path/to/app2

   Restart=always


   [Install]

   WantedBy=multi-user.target

   ```


Replace `/path/to/app1` and `/path/to/app2` with the actual paths to your application executables.


3. Enable and start both timer units:


   ```

   sudo systemctl enable myapp1.timer

   sudo systemctl enable myapp2.timer

   sudo systemctl start myapp1.timer

   sudo systemctl start myapp2.timer

   ```


With this setup, `app1` will start when the system boots, run for 10 minutes, then stop. After that, `app2` will start and run for 10 minutes, and the cycle repeats. This pattern continues indefinitely.

No comments: