Categories
SysOps

How to create Mastodon maintenance jobs

Create Mastodon maintenance jobs for bare-metal Mastodon installation from source code.

Remove downloaded media files.

$ cat << EOF | sudo tee /etc/systemd/system/mastodon-media-remove.service
[Unit]
Description=Mastodon - media remove service
Wants=mastodon-media-remove.timer

[Service]
Type=oneshot

User=mastodon
Group=mastodon

Environment="RAILS_ENV=production"
Environment="PATH=/home/mastodon/.rbenv/shims:/home/mastodon/.rbenv/bin:/bin"
WorkingDirectory=/home/mastodon/live
ExecStart=/home/mastodon/live/bin/tootctl media remove

[Install]
WantedBy=multi-user.target
EOF

Execute it everyday at 05:00 in the morning.

$ cat << EOF | sudo tee /etc/systemd/system/mastodon-media-remove.timer
[Unit]
Description=Schedule a media remove every week

[Timer]
Persistent=true
OnCalendar=*-*-* 05:00:00
Unit=mastodon-media-remove.service

[Install]
WantedBy=timers.target
EOF

Remove preview cards.

$ cat << EOF | sudo tee /etc/systemd/system/mastodon-preview_cards-remove.service
[Unit]
Description=Mastodon - preview cards remove service
Wants=mastodon-preview_cards-remove.timer

[Service]
Type=oneshot

User=mastodon
Group=mastodon

Environment="RAILS_ENV=production"
Environment="PATH=/home/mastodon/.rbenv/shims:/home/mastodon/.rbenv/bin:/bin"
WorkingDirectory=/home/mastodon/live
ExecStart=/home/mastodon/live/bin/tootctl preview_cards remove

[Install]
WantedBy=multi-user.target
EOF

Execute it everyday at 05:30 in the morning.

$ cat << EOF | sudo tee /etc/systemd/system/mastodon-preview_cards-remove.timer
[Unit]
Description=Schedule a preview cards remove every week

[Timer]
Persistent=true
OnCalendar=*-*-* 05:30:00
Unit=mastodon-preview_cards-remove.service

[Install]
WantedBy=timers.target
EOF

Create, upgrade and populate Elasticsearch indices.

$ cat << EOF | sudo tee /etc/systemd/system/mastodon-search-deploy.service
[Unit]
Description=Mastodon - update Elasticsearch indices
Wants=mastodon-search-deploy.timer

[Service]
Type=oneshot

User=mastodon
Group=mastodon

Environment="RAILS_ENV=production"
Environment="PATH=/home/mastodon/.rbenv/shims:/home/mastodon/.rbenv/bin:/bin"
WorkingDirectory=/home/mastodon/live
ExecStart=/home/mastodon/live/bin/tootctl search deploy

[Install]
WantedBy=multi-user.target
EOF

Execute it everyday at 06:00 in the morning, but consider doing it much more often.

$ cat << EOF | sudo tee /etc/systemd/system/mastodon-search-deploy.timer
[Unit]
Description=Schedule a preview cards remove every week

[Timer]
Persistent=true
OnCalendar=*-*-* 06:00:00
Unit=mastodon-search-deploy.service

[Install]
WantedBy=timers.target
EOF

Reload systemd configuration.

$ sudo systemctl daemon-reload

Enable these timers (enable & start).

$ sudo systemctl enable --now mastodon-preview_cards-remove.timer
$ sudo systemctl enable --now mastodon-media-remove.timer
$ sudo systemctl enable --now mastodon-search-deploy.timer

List timers.

$ systemctl list-timers      
NEXT                        LEFT          LAST                        PASSED       UNIT                                ACTIVATES                            
Sat 2022-11-19 05:00:00 UTC 1h 49min left n/a                         n/a          mastodon-media-remove.timer         mastodon-media-remove.service
Sat 2022-11-19 05:30:00 UTC 2h 19min left n/a                         n/a          mastodon-preview_cards-remove.timer mastodon-preview_cards-remove.service
Sat 2022-11-19 06:00:00 UTC 2h 49min left n/a                         n/a          mastodon-search-deploy.timer        mastodon-search-deploy.service
Sat 2022-11-19 06:36:10 UTC 3h 25min left Fri 2022-11-18 06:20:33 UTC 20h ago      apt-daily-upgrade.timer             apt-daily-upgrade.service
Sat 2022-11-19 14:59:27 UTC 11h left      Fri 2022-11-18 14:59:26 UTC 12h ago      systemd-tmpfiles-clean.timer        systemd-tmpfiles-clean.service
Sat 2022-11-19 16:08:56 UTC 12h left      Sat 2022-11-19 02:28:55 UTC 41min ago    motd-news.timer                     motd-news.service
Sat 2022-11-19 16:39:19 UTC 13h left      Sat 2022-11-19 00:55:29 UTC 2h 14min ago certbot.timer                       certbot.service
Sun 2022-11-20 00:00:00 UTC 20h left      Sat 2022-11-19 00:00:20 UTC 3h 9min ago  dpkg-db-backup.timer                dpkg-db-backup.service
Sun 2022-11-20 03:10:08 UTC 23h left      Sun 2022-11-13 14:34:53 UTC 5 days ago   e2scrub_all.timer                   e2scrub_all.service
Sun 2022-11-20 03:36:53 UTC 24h left      Sat 2022-11-19 02:40:53 UTC 29min ago    man-db.timer                        man-db.service
Sun 2022-11-20 04:20:38 UTC 1 day 1h left Sat 2022-11-19 02:40:57 UTC 29min ago    exim4-base.timer                    exim4-base.service
Sun 2022-11-20 04:46:41 UTC 1 day 1h left Sat 2022-11-19 02:57:21 UTC 12min ago    plocate-updatedb.timer              plocate-updatedb.service
Sun 2022-11-20 06:15:57 UTC 1 day 3h left Sat 2022-11-19 02:40:47 UTC 29min ago    logrotate.timer                     logrotate.service

13 timers listed.
Pass --all to see loaded but inactive timers, too.

List timers after several hours.

$ systemctl list-timers      
$ systemctl list-timers      
NEXT                        LEFT          LAST                        PASSED       UNIT                                ACTIVATES                            
Sat 2022-11-19 14:59:27 UTC 3h 31min left Fri 2022-11-18 14:59:26 UTC 20h ago      systemd-tmpfiles-clean.timer        systemd-tmpfiles-clean.service
Sat 2022-11-19 16:08:56 UTC 4h 41min left Sat 2022-11-19 02:28:55 UTC 8h ago       motd-news.timer                     motd-news.service
Sat 2022-11-19 16:39:19 UTC 5h 11min left Sat 2022-11-19 00:55:29 UTC 10h ago      certbot.timer                       certbot.service
Sun 2022-11-20 00:00:00 UTC 12h left      Sat 2022-11-19 00:00:20 UTC 11h ago      dpkg-db-backup.timer                dpkg-db-backup.service
Sun 2022-11-20 03:10:08 UTC 15h left      Sun 2022-11-13 14:34:53 UTC 5 days ago   e2scrub_all.timer                   e2scrub_all.service
Sun 2022-11-20 03:36:53 UTC 16h left      Sat 2022-11-19 02:40:53 UTC 8h ago       man-db.timer                        man-db.service
Sun 2022-11-20 04:20:38 UTC 16h left      Sat 2022-11-19 02:40:57 UTC 8h ago       exim4-base.timer                    exim4-base.service
Sun 2022-11-20 04:46:41 UTC 17h left      Sat 2022-11-19 02:57:21 UTC 8h ago       plocate-updatedb.timer              plocate-updatedb.service
Sun 2022-11-20 05:00:00 UTC 17h left      Sat 2022-11-19 05:00:10 UTC 6h ago       mastodon-media-remove.timer         mastodon-media-remove.service
Sun 2022-11-20 05:30:00 UTC 18h left      Sat 2022-11-19 05:30:01 UTC 5h 57min ago mastodon-preview_cards-remove.timer mastodon-preview_cards-remove.service
Sun 2022-11-20 06:00:00 UTC 18h left      Sat 2022-11-19 06:00:08 UTC 5h 27min ago mastodon-search-deploy.timer        mastodon-search-deploy.service
Sun 2022-11-20 06:15:57 UTC 18h left      Sat 2022-11-19 02:40:47 UTC 8h ago       logrotate.timer                     logrotate.service
Sun 2022-11-20 06:56:49 UTC 19h left      Sat 2022-11-19 06:36:37 UTC 4h 50min ago apt-daily-upgrade.timer             apt-daily-upgrade.service

13 timers listed.
Pass --all to see loaded but inactive timers, too.

Inspect sample service state.

$ sudo systemctl status mastodon-search-deploy
○ mastodon-search-deploy.service - Mastodon - update Elasticsearch indices
     Loaded: loaded (/etc/systemd/system/mastodon-search-deploy.service; disabled; vendor preset: enabled)
     Active: inactive (dead) since Sat 2022-11-19 06:00:24 UTC; 5h 30min ago
TriggeredBy: ● mastodon-search-deploy.timer
    Process: 197450 ExecStart=/home/mastodon/live/bin/tootctl search deploy (code=exited, status=0/SUCCESS)
   Main PID: 197450 (code=exited, status=0/SUCCESS)

Nov 19 06:00:09 mastodon systemd[1]: Starting Mastodon - update Elasticsearch indices...
Nov 19 06:00:24 mastodon tootctl[197450]: Progress: |====================================================================|
Nov 19 06:00:24 mastodon tootctl[197450]: Indexed 9786 records, de-indexed 0
Nov 19 06:00:24 mastodon systemd[1]: mastodon-search-deploy.service: Deactivated successfully.
Nov 19 06:00:24 mastodon systemd[1]: Finished Mastodon - update Elasticsearch indices