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 zcmeAS@N?(olHy`uVBq!ia0y~yVBEpL!0?WPnSp_!X3L}d3=9m50(?STFI+gmp^{;d zvw%S+fK2qkjeQ;|{cc&(`S4StE}$a_wOMHgQBv@lw}{#Np3zxmYP zIh@_buJ_Ki9h&jDd*!r->z9(&uQQub;@I4|Oyua%xk{zcVLIQW0J~<#=!S;&q?2Ql^|*GAp6*M*i1FB{HkuxGk{Q z5*qv1MlxhW+$nD7!h4b)cdRnF%jbv{O}l@uchb@w3G+%$7Cc%KqQNI16mHk`?d!SA zVsVeRG`z5TZMQ_bFhIMnhNWos5ym%RGWMa*)?Hq7{9KLKqb5_m41Jx@BWt_12CM#f zFA;ZvtFE8AeP|}l0y=^QzH^>UZ|A|r!y*<8 zD^zpVUYpp=CUK$Ru}Rt1%7S*jaHcp}rW!Y%pFu0U`xs>Wnu?p9b+daDRwuSzZ!+G) zG3Q}f!89&DMT;d($sswjtsd;K%-x;+xRt>o;amE11A_>2whZ00tJkCdE_UrL)EJ)ed~D-|@usOx>&HLcZk| z1$$&ts)Gw`k{kBt&OLmxzp8!m4@E&azZu6PE8fbBxACjb5#IP#$hx3z-PE7^tHL`! zo~!sbdvfafM?B{l*crZgJ~)-XOM1?|&}AMESk4_kJ0(Qzz+LrBL5s%8EbqjSeZ|L<@;`KZ^J3k<1(FRk{##%=lzElem+XVf8>@__R5s8`pFgdYk--oDel`lzR8w%3DsDviPx|6^2JBOfp* zq(<`IF6C11J0$+b0*U+Hy~*;Ka;~$_>)uN)PHR zE}r4MF~?X;T&YIL;=VJ(1B-?BO+q_LRSG@|?Z^$Zm5qrCV|(}2tzLf4m#<+=>hViK zId`Y3`eqgN&svivNBX7tR%V{^E>>qUk7r6(wmb!_IE50;BaD zd9(T6nW=9+5SsQZ%{L*c^Ox$@-3!!avRTd)-*enF?b*euEssU3f0sxzS;4$^`{Wy`=qJEoU-|JWbg)@od$-BV{!f8`ZM^ zb?b`-&zT%)tZvHw{eg!1=5VI=vYZK%BOiPzb9f*&Va}OGkYk_am%W|A!N98}XR_qO7Uvx@4+Y-c+zLv75-p9JT^RmfQ)6INx#F~c`P3sj1C7>a zOMZWI=OS0L0Z(gU{7dzBf8%pyldYGytgKjgNm%TfRMFQ!jc9`)3!d$gHZ11~+8*;2 z%yBThQ&*sEad_j07>mOb+glebRhwp?{Zu1H%Ilv#!_+Si!q-_bIwha~wPNne2S3s* zE7aX=lYbn^-S^8PptCL_dwp>CuGmD2hLA|MhYO}FRqeCqm5S4|uD001IzyQ6hJE3x zEeRs)%)7Ysk~Manlk$6OC^<*Lqkv=G0UO5UYc+&qmaDY?BqTm6G-vhTsVT(p) z^#Uey{y8AQM&TWm4_N%B+ghz)WMFV)c(H=z%lb5qyFUs<-zn-Xd{=m8Me6xJUj~MS z8XcY5wRh`Hy{!dv=1o{r@YJ@YyP@EaqRb&q^GyYkdCMLO=te91qr|%LMtevD-{B5|CUXuQt1Bw&{UJi-%G98Chu$x)0duKW<_Bzvb5j zUZ;+v{rzFbIM2!ZU7BT8%vB&ZM=IgL0_i)-4-VYpzP$Ls6QKfk75fE?55=WDXkfE= z_~C?;dPmNK5A*LSMI7@h=uermp_0A$!4uP_$=m(*_p9yb-Ol{nj4Q}maPI>-#^-xa z9Jpf2$1E&q`8Z-_NUVv|&x1$jInCjE_xVB6G{f57%f}>s{<^C*^?1CWSx$p`#bI1b=H>M9$wbi$VMLyt)Y22+k znd$pFU0XYr7|z?ZOV==kAKDi&W54t&=5;Mkiyr2!P}>m?&r9t~+5cY?aLQ85e(k@{ zt5MjZfJwc8iQVr33m+&6>`3nC%VJ<~5MZ#Qob$WvDTfVnqIYYE??Q^&u-4Z zARyv=)Wh!gdbP9yrMF!AvO98@RhsiH+x@qdna|=u12f+aw%%&D{?eVxiy0Ug7(8A5 KT-G@yGywn(%o5lD 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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 literal 0 HcmV?d00001