Skip to content

Instantly share code, notes, and snippets.

@kabili207
Last active April 26, 2025 17:28
Show Gist options
  • Save kabili207/2cd2d637e5c7617411a666d8d7e97101 to your computer and use it in GitHub Desktop.
Save kabili207/2cd2d637e5c7617411a666d8d7e97101 to your computer and use it in GitHub Desktop.
Rclone systemd user service

rclone systemd service

Preparation

This service will use the same remote name you specified when using rclone config create. If you haven't done that yet, do so now.

Next, create the mountpoint for your remote. The service uses the location ~/mnt/<remote> by default.

mkdir ~/mnt/dropbox

The --allow-other option is required in order to work in many desktop environments. This flag must be enabled by adding user_allow_other to /etc/fuse.conf. If you aren't using a desktop environment, such as on a server, this option can be omitted.

Adding the service

Save the [email protected] file in ~/.config/systemd/user/ Make sure you include the @. This is required to work.

As your normal user, run:

systemctl --user daemon-reload

Using the service

You can now start/enable each remote by using rclone@<remote>

systemctl --user enable --now rclone@dropbox
# User service for Rclone mounting
#
# Place in ~/.config/systemd/user/
# File must include the '@' (ex [email protected])
# As your normal user, run
# systemctl --user daemon-reload
# You can now start/enable each remote by using rclone@<remote>
# systemctl --user enable --now rclone@dropbox
[Unit]
Description=rclone: Remote FUSE filesystem for cloud storage config %i
Documentation=man:rclone(1)
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
ExecStartPre=-/usr/bin/mkdir -p %h/mnt/%i
ExecStart= \
/usr/bin/rclone mount \
--config=%h/.config/rclone/rclone.conf \
--vfs-cache-mode writes \
--vfs-cache-max-size 100M \
--log-level INFO \
--log-file /tmp/rclone-%i.log \
--umask 022 \
--allow-other \
%i: %h/mnt/%i
ExecStop=/bin/fusermount -u %h/mnt/%i
[Install]
WantedBy=default.target
@jhub95
Copy link

jhub95 commented Feb 24, 2025

This script works well, thanks for your contribution, @kabili207. Maybe this is a silly question, but I can't seem to get it right. How do I mount a drive to a remote location's subdirectory?

I've tried the following where DropBox is the rclone remote name Photos/0test is the subdirectory I'd like to mount:

  • systemctl --user enable --now rclone@"DropBox:Photos/0test/"
  • systemctl --user enable --now rclone@DropBox:Photos/0test/
  • systemctl --user enable --now rclone@DropBox Photos/0test

BTW, when I run systemctl --user enable --now rclone@DropBox it does in fact mount my root DropBox folder and works as expected.

I've also looked into rclone config to see if I can statically enter the remote subfolder in the config file but I haven't figured that out either.

Any help would be greatly appreciated.
Cheers.

@kabili207
Copy link
Author

@jhub95 I can't say I've ever tested using a subdirectory, but looking at the docs for the rclone mount command, you'll probably want to edit line 28 of the service file to remove the : so you can specify it manually.

Keep in mind that if you do this you'll likely have to update anything that's not using a subdirectory so the remote ends with a : like so systemctl --user enable rclone@remote:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment