mirror of
https://github.com/rclone/rclone
synced 2024-11-24 01:26:25 +01:00
mount: run rclone mount in the background - fixes #723
This commit is contained in:
parent
90af7af9a3
commit
ebfeec9fb4
15
cmd/mountlib/daemon.go
Normal file
15
cmd/mountlib/daemon.go
Normal file
@ -0,0 +1,15 @@
|
||||
// Daemonization interface for non-Unix variants only
|
||||
|
||||
// +build windows darwin,!cgo
|
||||
|
||||
package mountlib
|
||||
|
||||
import (
|
||||
"log"
|
||||
"runtime"
|
||||
)
|
||||
|
||||
func startBackgroundMode() bool {
|
||||
log.Fatalf("background mode not supported on %s platform", runtime.GOOS)
|
||||
return false
|
||||
}
|
32
cmd/mountlib/daemon_unix.go
Normal file
32
cmd/mountlib/daemon_unix.go
Normal file
@ -0,0 +1,32 @@
|
||||
// Daemonization interface for Unix variants only
|
||||
|
||||
// +build !windows
|
||||
// +build !darwin cgo
|
||||
|
||||
package mountlib
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"github.com/sevlyar/go-daemon"
|
||||
)
|
||||
|
||||
func startBackgroundMode() bool {
|
||||
cntxt := &daemon.Context{}
|
||||
d, err := cntxt.Reborn()
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
|
||||
if d != nil {
|
||||
return true
|
||||
}
|
||||
|
||||
defer func() {
|
||||
if err := cntxt.Release(); err != nil {
|
||||
log.Printf("error encountered while killing daemon: %v", err)
|
||||
}
|
||||
}()
|
||||
|
||||
return false
|
||||
}
|
@ -23,6 +23,7 @@ var (
|
||||
AllowOther = false
|
||||
DefaultPermissions = false
|
||||
WritebackCache = false
|
||||
Daemon = false
|
||||
MaxReadAhead fs.SizeSuffix = 128 * 1024
|
||||
ExtraOptions []string
|
||||
ExtraFlags []string
|
||||
@ -174,6 +175,14 @@ will see all files and folders immediately in this mode.
|
||||
}
|
||||
}
|
||||
|
||||
// Start background task if --background is specified
|
||||
if Daemon {
|
||||
daemonized := startBackgroundMode()
|
||||
if daemonized {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
err := Mount(fdst, args[1])
|
||||
if err != nil {
|
||||
log.Fatalf("Fatal error: %v", err)
|
||||
@ -196,7 +205,7 @@ will see all files and folders immediately in this mode.
|
||||
flags.FVarP(flagSet, &MaxReadAhead, "max-read-ahead", "", "The number of bytes that can be prefetched for sequential reads.")
|
||||
flags.StringArrayVarP(flagSet, &ExtraOptions, "option", "o", []string{}, "Option for libfuse/WinFsp. Repeat if required.")
|
||||
flags.StringArrayVarP(flagSet, &ExtraFlags, "fuse-flag", "", []string{}, "Flags or arguments to be passed direct to libfuse/WinFsp. Repeat if required.")
|
||||
//flags.BoolVarP(flagSet, &foreground, "foreground", "", foreground, "Do not detach.")
|
||||
flags.BoolVarP(flagSet, &Daemon, "daemon", "", Daemon, "Run mount as a daemon (background mode).")
|
||||
|
||||
// Add in the generic flags
|
||||
vfsflags.AddFlags(flagSet)
|
||||
|
@ -20,6 +20,11 @@ This is **EXPERIMENTAL** - use with care.
|
||||
|
||||
First set up your remote using `rclone config`. Check it works with `rclone ls` etc.
|
||||
|
||||
You can either run mount in foreground mode or background(daemon) mode. Mount runs in
|
||||
foreground mode by default, use the `--daemon` flag to specify background mode mode.
|
||||
Background mode is only supported on Linux and OSX, you can only run mount in
|
||||
foreground mode on Windows.
|
||||
|
||||
Start the mount like this
|
||||
|
||||
rclone mount remote:path/to/files /path/to/local/mount
|
||||
@ -28,12 +33,15 @@ Or on Windows like this where X: is an unused drive letter
|
||||
|
||||
rclone mount remote:path/to/files X:
|
||||
|
||||
When the program ends, either via Ctrl+C or receiving a SIGINT or SIGTERM signal,
|
||||
the mount is automatically stopped.
|
||||
When running in background mode the user will have to stop the mount manually (specified below).
|
||||
|
||||
When the program ends while in foreground mode, either via Ctrl+C or receiving
|
||||
a SIGINT or SIGTERM signal, the mount is automatically stopped.
|
||||
|
||||
The umount operation can fail, for example when the mountpoint is busy.
|
||||
When that happens, it is the user's responsibility to stop the mount manually with
|
||||
When that happens, it is the user's responsibility to stop the mount manually.
|
||||
|
||||
Stopping the mount manually:
|
||||
# Linux
|
||||
fusermount -u /path/to/local/mount
|
||||
# OS X
|
||||
|
Loading…
Reference in New Issue
Block a user