From 36d399c3cbd69335ca1d4eaa271211371c2bc4eb Mon Sep 17 00:00:00 2001 From: ProactiveServices Date: Wed, 30 Mar 2016 11:18:41 +0000 Subject: [PATCH] Windows service/NSSM improvements Cleaned up style, grammar and added steps to enable logging and support Syncthing exit/restart/upgrade actions. Additional note regarding security concerns. Removed superfluous final paragraph. Somewhat more modern and tidier screenshot, renamed it to make it less generic --- users/autostart.rst | 69 +++++++++++++++++++++------------- users/st1.png | Bin 2927 -> 0 bytes users/windows-nssm-config.png | Bin 0 -> 11307 bytes 3 files changed, 42 insertions(+), 27 deletions(-) delete mode 100644 users/st1.png create mode 100644 users/windows-nssm-config.png diff --git a/users/autostart.rst b/users/autostart.rst index f656a6566..7bbdadc6d 100644 --- a/users/autostart.rst +++ b/users/autostart.rst @@ -83,8 +83,8 @@ copy the following command instead of the command in step 5:: start "Syncthing" /low syncthing.exe -no-console -no-browser -Run independent of user login -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Run as a service independent of user login +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. warning:: There are important security considerations with this approach. If you do not @@ -95,38 +95,53 @@ Run independent of user login Therefore, you **must** ensure that you set a GUI password, or run Syncthing as an unprivileged user. -With the above configuration, Syncthing only starts when a user logs in -onto the machine. This is not optimal on servers, where a machine can -run long times after a reboot without anyone logged in. In this case, it +With the above configuration, Syncthing only starts when a user logs on to the machine. This is not optimal on servers where a machine can +run long times after a reboot without anyone logged in. In this case it is best to create a service that runs as soon as Windows starts. This -can be achieved using nssm. +can be achieved using NSSM, the "Non-Sucking Service Manager". Note that starting Syncthing on login is the preferred approach for almost any end-user scenario. The only scenario where running Syncthing as a service makes sense is for (mostly) headless servers, administered by a sysadmin who knows enough to understand the security implications. -#. Download and extract `nssm `__ to a folder - where it can stay (e.g. *c:Files* or the Syncthing folder. -#. run *nssm.exe install syncthing* -#. Select ``syncthing.exe`` in the first tab and enter - ``-no-console -no-browser`` as Arguments - |Configuration Screenshot| -#. at the Details tab you can switch to *Automatic (Delayed Start)* to - start it only some time after boot and speed up the boot process - (optional) -#. At the *Log On* tab you can enter a username and password for the - user to run Syncthing as. This user needs to have access to all the - synced folders. Usually, you can leave it as the System account. -#. At the Process Tab you can change the priority to low if you want a - more responsive system at the cost of longer sync time -#. Click the *Install Service* Button -#. Start the service using the windows service manager, enter - ``sc start syncthing`` in a console window or restart the PC. -#. Connect to the Syncthing UI, enable HTTPS, and set a secure username - and password. +#. Download and extract `nssm `__ to a folder where it can stay. The NSSM executable performs administration as well as executing as the Windows service so it will need to be kept in a suitable location. +#. From an administrator Command Prompt, CD to the NSSM folder and run ``nssm.exe install syncthing`` +#. Application Tab -Please note the configuration directory under this method is located under ``C:\Windows\System32\config\systemprofile\AppData\Local\Syncthing`` + - Set *Path* to your ``syncthing.exe`` and enter ``-no-restart -no-browser -home=""`` as Arguments. Note: Logging is set later on. ``-logfile`` here will not be applied. + - |Windows NSSM Configuration Screenshot| +#. Details Tab + + - Optional: Set *Startup type* to *Automatic (Delayed Start)* to delay the start of Syncthing when the system first boots, to improve boot speed. +#. Log On Tab + + - Enter the user account to run Syncthing as. This user needs to have access to all the synced folders. You can leave this as *Local System* but doing so poses security risks. Setting this to your Windows user account will reduce this; ideally create a dedicated user account with minimal permissions. +#. Process Tab + + - Optional: Change priority to *Low* if you want a more responsive system at the cost of somewhat longer sync time when the system is busy. + - Optional: To enable logging enable "Console window". +#. Shutdown Tab + + - To ensure Syncthing is shut down gracefully select all of the checkboxes and set all *Timeouts* to *10000ms*. +#. Exit Actions Tab + + - Set *Restart Action* to *Stop service (oneshot mode)*. Specific settings are used later for handling Syncthing exits, restarts and upgrades. +#. I/O Tab + + - Optional: To enable logging set *Output (stdout)* to the file desired for logging. The *Error* field will be automatically set to the same file. +#. File Rotation Tab + + - Optional: Set the rotation settings to your preferences. +#. Click the *Install Service* Button +#. To ensure that Syncthing exits, restarts and upgrades are handled correctly by the Windows service manager, some final settings are needed. Execute these in the same Commant Prompt: + + - ``nssm set syncthing AppExit Default Exit`` + - ``nssm set syncthing AppExit 0 Exit`` + - ``nssm set syncthing AppExit 3 Restart`` + - ``nssm set syncthing AppExit 4 Restart`` +#. Start the service via ``sc start syncthing`` in the Command Prompt. +#. Connect to the Syncthing UI, enable HTTPS, and set a secure username and password. Mac OS X -------- @@ -300,5 +315,5 @@ This will create an additional configuration file automatically and you can define (or overwrite) further service parameters like e.g. ``Environment=STTRACE=model``. -.. |Configuration Screenshot| image:: st1.png +.. |Windows NSSM Configuration Screenshot| image:: windows-nssm-config.png .. |Setup Screenshot| image:: st2.png diff --git a/users/st1.png b/users/st1.png deleted file mode 100644 index 2a0b42ab0d3a20786da940f888d5b21f15a8bc58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2927 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 diff --git a/users/windows-nssm-config.png b/users/windows-nssm-config.png new file mode 100644 index 0000000000000000000000000000000000000000..50f006b415b7216f427db071dc265ac55ef7c198 GIT binary patch literal 11307 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