Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Control syncthing daemon executable from tray action #48

Closed
xor-gate opened this issue Jun 4, 2018 · 8 comments
Closed

Control syncthing daemon executable from tray action #48

xor-gate opened this issue Jun 4, 2018 · 8 comments

Comments

@xor-gate
Copy link
Member

xor-gate commented Jun 4, 2018

Currently it is not possible to control the syncthing subprocess with start/stop/restart actions. Also we must sure we don't lose track of the subprocess.

@ngocphamm
Copy link

I think I'm having an issue related to this, when I use ControlPlane to "switch context" for my laptop. Upon leaving a context, I would have ControlPlane to "quit" the app. I don't really know what signal it sends to "quit" the app, but I noticed for now it seems to just "kill" the main app process Syncthing (first letter capitalized), and the sub-processes of syncthing are still there.

Would love to see this being implemented. Please let me know if I can do some testing because I'm afraid I can't help with the actual development :(

@xor-gate
Copy link
Member Author

xor-gate commented Jul 9, 2018

Yes I have also observed this bug, the wrapper sometimes loses track of the running syncthing subprocess. I need some more time on this. Currently I'm working in my free time on #54. Thanks for reporting, highly appreciated!

@xor-gate xor-gate added the bug label Jul 9, 2018
@ngocphamm
Copy link

Not a problem! I'm thankful for people like you who work on open-source projects for the sake of many others. Just let me know if I can help with testing!

@xor-gate
Copy link
Member Author

xor-gate commented Jul 9, 2018

As soon there is some progress you get notified in this issue.

@calmh
Copy link
Member

calmh commented Jul 28, 2018

So currently it's a fairly fire-and-forget sort of setup. If Syncthing doesn't launch we'll never know, if we crash it'll stay running in the background, and it uses the standard monitoring process for restarts etc. I think we should do the work of the Syncthing monitor process ourselves here and manage restarts etc., and make visible the daemon state somehow in the UI.

The one abnormality that I think would be worth handling is if Syncthing exits or can't be started, yet is reachable via the API. This happens if it's already running in the background for example - we can't start it again, but we can talk to it. This should be a success scenario, and when we can no longer talk to it over the API we should try starting it again. (Or maybe try starting it periodically regardless.)

I can try to tackle this if noone objects.

@xor-gate
Copy link
Member Author

Yes this is indeed FAF. Because I initialy started the project for personal use it worked fairly well. But those corner cases where stuff is not working should be handled in a convient way. When putting it out in the wild and more people going to actual install it on their computer.

@calmh calmh self-assigned this Jul 28, 2018
calmh added a commit to calmh/syncthing-macos that referenced this issue Jul 30, 2018
@xor-gate
Copy link
Member Author

xor-gate commented Aug 3, 2018

Fixed in #71

@xor-gate
Copy link
Member Author

xor-gate commented Aug 8, 2018

@calmh I have updated using the auto-updater. It seems it then loses track of the child process and the upgraded wrapper restarts every now and then the background service. I'm not sure but I think we can't do much, except rethink how we could kill spawned and detached background service instances. Maybe we should track the PID from the NSTask and store it, on startup when it stops after trying to bind we should try to kill the instance of the PID we stored earlier?

xor-gate added a commit that referenced this issue Nov 7, 2018
* syncthing/Scripts/syncthing-resource.sh: Bundle with 0.14.47

* Get rid of syncthing/Scripts/syncthing-inotify-resource.sh as filesystem change notifications are builtin to syncthing since v0.14.47

* Delay reconnect attempts if the server returned an error (#47)

This should fix high CPU usage issue when API key is invalid. Partial fixes #46.

* Bump syncthing resource to v0.14.48 (#55)

* syncthing/STApplication.m: Sort folders submenu ascending (fixes #49) (#53)

* syncthing/STApplication.m: Sort folders submenu ascending (fixes #49)
* syncthing/STApplication.m: Fix review comment of @virusman

* Use CocoaPods for Sparkle framework dependency (fixes #57) (#60)

* Update syncthing resource to v0.14.49 (#64)

* Update syncthing resource to v0.14.49
* syncthing/Scripts/syncthing-resource.sh: Use new tarball name

* Adjust event request timeout (fixes #65) (#66)

This sets the event request a bit longer and, more importantly, informs
Syncthing of the timeout. The result is that the request returns
successfully without events, and we don't get a timeout error.

* Refactor HTTP(S) handling (fixes #24)

This moves event getting into the XGSyncthing library, while also
refactoring it to use NSURLSession, a delegate for allowing local TLS
certificates, and proper parameters.

The delegate simply skips HTTPS certificate checking on hosts called
"localhost", "127.0.0.1", or "::1". I think this is what most people
would want from this tool.

* Remove #24 from README too

* README.md: Update to use new URLs (#67)

Also add @calmh to AUTHORS.md

* Move LocalhostTLSDelegate files accidentally committed at root (#70)

* Generate appcast.xml from github releases (#63)

* script/ghreleases2appcast.go: Initial working github releases to sparkle framework appcast.xml converter (resolves #62)

* Activate existing windows for About/Preferences (fixes #72) (#73)

* Add daemon process handling (fixes #48) (#71)

* Add new submenu with status of the syncthing service
* Cleanup some code

* Copy executable from bundle (fixes #37) (#76)

This copies the bundled executable before executing it, if the target
executable doesn't already exist. This has several desirable properties:

- We do not mess up the application bundle by letting Syncthing upgrade

- The user can revert an undesired upgrade by deleting the binary and
  restarting the wrapper.

The binary is stored in ~/Application Support/Syncthing-macOS because I
don't want to put it in Syncthing's config directory. That directory is
in principle managed by Syncthing and we can't be sure it won't be
removed or something.

* Prepare for v0.14.49-1 release (#75)

* syncthing.xcodeproj/project.pbxproj: Rename PRODUCT_BUNDLE_IDENTIFIER for Sparkle updater (see #74) (#79)

From com.github.syncthing.syncthing-macos back to com.github.xor-gate.syncthing-macosx to fix Sparkle update issue in #74.

* script/ghreleases2appcast.go: Use working blackfriday.v1 (see #77) (#78)

* script/ghreleases2appcast.go: Changes for upgrades.s.n deployment (#80)

Basically, don't alter the download URLs for now, indent the XML for
readability.

* Fixup project move leftovers and update some documentation (#81)

* Fixup project move leftovers and update some documentation and contributing
* Cleanup xcode project with useless xgsyncthing target
* README.md: Add note about homebrew cask (ref #23)

* readme: Update contribution guidelines link (fixes #83)

* Bump syncthing resource to 0.14.50

* Use latest syncthing v0.14.51 resource

* CocoaPods: Manual patch EXPANDED_CODE_SIGN_IDENTITY: unbound variable #7708 bug

* Use syncthing v0.14.52 resource
@syncthing syncthing locked and limited conversation to collaborators Aug 4, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

4 participants