Running as systemd daemon fails with large vfs cache

Aye, here's a couple of systemd units, one for rclone rcd and another for rclone rc mount:

$ cat rclone-rcd.service
[Unit]
Description=rclone rcd
Wants=network-online.target
After=network-online.target

[Service]
Type=notify
TimeoutSec=300
Restart=always
RestartSec=10
ExecStart=/usr/bin/rclone rcd \
        --config /root/.config/rclone/rclone.conf \
        --cache-dir /srv/storage/rclone-cache \
        --use-mmap \
        --buffer-size 100M \
        --drive-stop-on-upload-limit \
        --drive-stop-on-download-limit \
        --rc-addr 127.0.0.1:5080 \
        --rc-user user \
        --rc-pass supersecurepasswordthatnobodywilleveruess \
        --rc-web-gui \
        --rc-web-gui-no-open-browser

[Install]
WantedBy=default.target
$ cat rclone-backups.service
[Unit]                                                                                                                                                                                                            Description=rclone backups
BindsTo=rclone-rcd.service
After=rclone-rcd.service

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=-/usr/bin/rclone rc --rc-addr 127.0.0.1:5080 --rc-user user --rc-pass supersecurepasswordthatnobodywilleveruess mount/unmount \
        mountPoint=/srv/shares/backups/
ExecStartPre=-/bin/fusermount -u /srv/shares/backups
ExecStartPre=-/bin/sleep 10
ExecStart=/usr/bin/rclone rc --rc-addr 127.0.0.1:5080 --rc-user user --rc-pass supersecurepasswordthatnobodywilleveruess  mount/mount \
        fs=my-remote:backups \
        mountPoint=/srv/shares/backups/ \
        mountOpt='{ \
                "AllowNonEmpty": false, \
                "AllowOther": true, \
                "AllowRoot": false, \
                "AsyncRead": true, \
                "AttrTimeout": 2000000000, \
                "Daemon": false, \
                "DaemonTimeout": 0, \
                "DebugFUSE": false, \
                "DefaultPermissions": true, \
                "ExtraFlags": [], \
                "ExtraOptions": [], \
                "MaxReadAhead": 131072, \
                "NetworkMode": false, \
                "NoAppleDouble": true, \
                "NoAppleXattr": false, \
                "VolumeName": "", \
                "WritebackCache": true \
        }' \
        vfsOpt='{ \
                "CacheMaxAge": 21600000000000, \
                "CacheMaxSize": 1073741824, \
                "CacheMode": 1, \
                "CachePollInterval": 60000000000, \
                "CaseInsensitive": false, \
                "ChunkSize": 31457280, \
                "ChunkSizeLimit": 209715200, \
                "DirCacheTime": 600000000000, \
                "DirPerms": 504, \
                "FilePerms": 438, \
                "GID": 0, \
                "NoChecksum": false, \
                "NoModTime": false, \
                "NoSeek": false, \
                "PollInterval": 60000000000, \
                "ReadAhead": 50000000, \
                "ReadOnly": false, \
                "ReadWait": 20000000, \
                "UID": 0, \
                "Umask": 63, \
                "WriteBack": 300000000000, \
                "WriteWait": 1000000000 \
        }'
ExecStop=-/usr/bin/rclone rc --rc-addr 127.0.0.1:5080 --rc-user user --rc-pass supersecurepasswordthatnobodywilleveruess mount/unmount \
        mountPoint=/srv/shares/backups/
ExecStop=-/bin/fusermount -u /srv/shares/backups

[Install]
WantedBy=default.target

Pay attention to the trailing slashes in some places. No idea why they are necessary in some cases, but I've had to use them...
Also you can see that there's plenty of attempts to unmount a share. This is because rclone really doesn't feel like unmounting them sometimes. It can take several attempts, and I have no idea why.
Your file paths may differ. These are valid on Ubuntu 20.04 and 18.04.
You may have to read the code to figure out what some of the options mean. I certainly had to do that.
Also things like umask is in decimal (when you use rclone mount your specify it in octal), timestamps are in nanoseconds or whatever Go uses, etc.
This isn't easy, but it certainly makes things a bit cleaner and allows you to use the web GUI to monitor activity from more than one mount point at a time.