Fix unhandled monitor initialisation exception (Issue #704) (#705)

* Catch MonitorException when initialisation failure occurs, print error and exit ... cant enter monitor loop if we cant initialise correctly.
* Cleanup and add documentation update
This commit is contained in:
abraunegg 2019-10-30 17:46:02 +11:00 committed by GitHub
parent 9b3179540f
commit 12947d160f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 95 additions and 61 deletions

View file

@ -427,6 +427,31 @@ Currently not supported.
### SharePoint / Office 365 Shared Libraries
Refer to [./Office365.md](Office365.md) for configuration assistance.
## Running 'onedrive' in 'monitor' mode
Monitor mode (`--monitor`) allows the onedrive process to continually monitor your local file system for changes to files.
Two common errors can occur when using monitor mode:
* Intialisation failure
* Unable to add a new inotify watch
Both of these errors are local environment issues, where the following system variables need to be increased as the current system values are potentially too low:
* `fs.file-max`
* `fs.inotify.max_user_watches`
To determine what these values are on your system use the following commands:
```
sysctl fs.file-max
sysctl fs.inotify.max_user_watches
```
To make a change to these variables:
```
sudo sysctl fs.file-max=<new_value>
sudo sysctl fs.inotify.max_user_watches=<new_value>
```
To make these changes permanent, refer to your OS reference documentation.
## Running 'onedrive' as a system service
There are two ways that onedrive can be used as a service
* via init.d

View file

@ -671,8 +671,16 @@ int main(string[] args)
signal(SIGINT, &exitHandler);
signal(SIGTERM, &exitHandler);
// initialise the monitor class
if (!cfg.getValueBool("download_only")) m.init(cfg, cfg.getValueLong("verbose") > 0, cfg.getValueBool("skip_symlinks"), cfg.getValueBool("check_nosync"));
// attempt to initialise monitor class
try {
m.init(cfg, cfg.getValueLong("verbose") > 0, cfg.getValueBool("skip_symlinks"), cfg.getValueBool("check_nosync"));
} catch (MonitorException e) {
// monitor initialisation failed
log.error("ERROR: ", e.msg);
exit(-1);
}
if (!cfg.getValueBool("download_only")) {
// monitor loop
immutable auto checkInterval = dur!"seconds"(cfg.getValueLong("monitor_interval"));
immutable auto logInterval = cfg.getValueLong("monitor_log_frequency");
@ -740,6 +748,7 @@ int main(string[] args)
}
}
}
}
// Workaround for segfault in std.net.curl.Curl.shutdown() on exit
oneDrive.http.shutdown();