Obsidian Sync as service

Obsidian series - part 3
Posted by Dev Matters on Sunday, November 6, 2022
The series completes the tutorial Obsidian Sync. If implemented you can save few bucks every year and still have Obsidian Sync in cloud. Automated Obsidian Sync

Table Of Contents

Service and Timer

Create a systemd service and a timer . The function of timer unit is to trigger service unit and the service unit will execute the obsidian-sync script

Timer Unit

Create a timer obsidian-sync.timer unit

 1bash -c "cat >$HOME/.config/systemd/user/obsidian-push.timer" <<EOF
 2# Timer for obsidian-push.service
 3# By Munish Mehta
 4
 5[Unit]
 6Description=Starts the obsidian-push.service
 7Requires=obsidian-push.service
 8
 9[Timer]
10Unit=obsidian-push.service
11OnCalendar=MON-FRI *-*-* 17:00:00
12
13[Install]
14WantedBy=timers.target
15EOF

Test the status of obsidian-push.timer timer

1systemctl --user status obsidian-push.timer

Output

1obsidian-push.timer - Starts the obsidian-push.service
2    Loaded: loaded (/home/munmeh/.config/systemd/user/obsidian-push.timer; disabled; vendor preset: enabled)
3    Active: inactive (dead)
4     Trigger: n/a
5    Triggers: ● obsidian-push.service

Service Unit

Create a service which executes the [[obsidian-sync]] bash script to push changes to origin.

Update your obsidian valut path in line below

 1export OBSIDIAN_LOCAL_PATH="$HOME/Documents/gitrepo/obsidian-personal-vault/"
 2bash -c "cat >$HOME/.config/systemd/user/obsidian-push.service" <<EOF
 3#This service unit is for executing obsidian-sync.sh script which in turn push local obsidian changes to git remote
 4#By Munish Mehta
 5[Unit]
 6Description=Push obsidian local vault changes to git remote https://github.com/mumehta/obsidian-personal-vault
 7Wants=obsidian-push.timer
 8
 9[Service]
10Type=oneshot
11ExecStart=/bin/bash -c "$HOME/.obsidian/obsidian-sync.sh $OBSIDIAN_LOCAL_PATH"
12
13[Install]
14WantedBy=default.target
15EOF

Test status of obsidian-push service

1systemctl --user status obsidian-push.service

Output

1● obsidian-push.service - Push obsidian local vault changes to git remote https://github.com/mumehta/obsidian-personal-vault
2        Loaded: loaded (/home/munmeh/.config/systemd/user/obsidian-push.service; disabled; vendor preset: enabled)
3        Active: inactive (dead)

Start service and the timer

1systemctl --user start obsidian-push.timer
2systemctl --user start obsidian-push.service

Check status

service
1systemctl --user status obsidian-push.service

Output

1obsidian-push.service - Push obsidian local vault changes to git remote https://github.com/mumehta/obsidian-personal-vault
2    Loaded: loaded (/home/munmeh/.config/systemd/user/obsidian-push.service; disabled; vendor preset: enabled)
3     Active: inactive (dead) since Thu 2022-09-08 15:22:10 AEST; 1min 27s ago
4     TriggeredBy: ● obsidian-push.timer
5    Process: 2873361 ExecStart=/bin/bash -c /home/munmeh/.obsidian/obsidian-sync.sh /home/munmeh/Documents/gitrepo/obsidian-personal-vault/ (code=exi>
6   Main PID: 2873361 (code=exited, status=0/SUCCESS)
timer
1systemctl --user status obsidian-push.timer

Output

1obsidian-push.timer - Starts the obsidian-push.service
2	 Loaded: loaded (/home/munmeh/.config/systemd/user/obsidian-push.timer; disabled; vendor preset: enabled)
3	 Active: active (waiting) since Thu 2022-09-08 15:21:55 AEST; 3min 27s ago
4	Trigger: Thu 2022-09-08 17:00:00 AEST; 1h 34min left
5   Triggers: ● obsidian-push.service
6    Sep 08 15:21:55 mmsys systemd[2997]: Started Starts the obsidian-push.service.

Enable timer and service units

1systemctl --user enable obsidian-push.timer
2systemctl --user enable obsidian-push.service

Check logs

1journalctl --user -S today -u obsidian-push.timer
2journalctl --user -S today -u obsidian-push.service

If you like post, consider buy me a coffee! :coffee:

Reference


comments powered by Disqus