On Mon 12 Sep 2022 at 09:31:07 (+0200), Jürgen Bausa wrote: > I am using systemd automount units (see below) to mount network shares on my > laptop > (debian bullseye). This works fine in principle but I have one big issue: > > At home it is enough to set TimeoutSec to 2 s in the mount unit. Normally the > server is > available and the share is mounted. If the server is down I need to wait for > just 2 s > until I see it is not there. Thats ok. > > But when not at home and using a vpn, the mount unit will not mount with > TimeoutSec set to 2 s. > I need to set it to at least 10 s. Then the mount works. But using 10 s means > I always have > to wait 10 s for each share the system tries to reach and is not available. > This is really > annoying when starting libreoffice for example (which seems to check for the > last used > documents on startup). > > What I would like to do is to put a test for server availabilty (e.g. ping -c > 1 $SERVER) > into the automount file. When the server is not available, automount is not > run. > Is this possible? Or do I need to create a spcial unit and put something like > > Requires=nfs-server-online.target > > in my automount unit? And how would the nfs-server-online unit look like? > > What I am doing at the moment is running a script that checks availability of > the nfs server > every some seconds (via ping) and turns on/off the automount unit accordingly > (via systemctl start/stop mnt-share.automount). This works, but its not a > very elegant solution. > I am pretty sure it can be done better using systemd only.
I don't remember the details of the complaint, but there are circumstances where systemd kills off jobs that it is controlling. You could investigate using cron's @reboot to fire off a number of tasks, each mounting one of the shares. I use it myself to restart minidlna after I've got around to decrypting and mounting /home, which could be any time or not at all: # crontab -l # /root/.cron/crontab-axis last edited 2022-04-25 # Note that this is root's own crontab so it doesn't need the # user field but it does require installing with crontab. MAILTO= … # check for (dist-)updated packages and provoke an email if any are in the cache 0 */3 * * * apt-get -qq -o Acquire::http::Proxy="http://192.168.1.14:3142/" update && apt-get -qq -d -o Acquire::http::Proxy="http://192.168.1.14:3142/" dist-upgrade && find /var/cache/apt/archives/ -name '*deb' # restart streamer when mounting /home gives it access to served files @reboot /root/.cron/mystreamers-restart.sh … … # cat .cron/mystreamers-restart.sh #!/bin/bash # /root/mystreamers-restart.sh last edited 2022-05-15 # wait for real /home to be mounted (its lost+found appears) # read the directories to be served # set the group permissions to allow minidlna to serve the files # restart the service Conf=/etc/minidlna.conf Log=/var/log/minidlna/minidlna.log while :; do if [ ! -d /home/lost+found ]; then sleep 60 else if [ -f "$Conf" ]; then sed -n '/^media_dir=/s/media_dir=//p' "$Conf" | while read Served; do chmod -R go=rX "$Served" done if [ -f "$Log" ]; then date +'Root cron restarted %Y-%m-%d %H:%M:%S' >> "$Log" fi systemctl restart minidlna.service fi break fi done # Cheers, David.