Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there Windows analog to supervisord?

I need to run python script and be sure that it will restart after it terminates. I know that there is UNIX solution called supervisord. But unfortunately server where my script has to be run is on Windows. Do you know what tool can be useful? Thanks

like image 460
pss Avatar asked Oct 02 '11 23:10

pss


People also ask

How do I start a Supervisord process?

To start supervisord, run $BINDIR/supervisord. The resulting process will daemonize itself and detach from the terminal. It keeps an operations log at $CWD/supervisor.

What is Supervisord service?

Supervisord or Supervisor daemon is an open source process management system. In a nutshell: if a process crashes for any reason, Supervisor restarts it. From the Supervisord website: Supervisor is a client/server system that allows its users to monitor and control a number of processes on UNIX-like operating systems.

How do I know if Supervisorctl is running?

Step 1 - Installation The supervisor service runs automatically after installation. You can check its status: sudo systemctl status supervisor.


2 Answers

Despite the big fat disclaimer here, you can run Supervisor with Cygwin in Windows; it turns out that Cygwin goes a long way to simulate a Posix environment, so well that in fact supervisord runs unchanged. There is no need to learn a new tool, and you will even save quite a bit of work if you need to deploy a complicated project across multiple platforms.

Here's my recipe:

  1. If you have not done it yet, install Cygwin. During the installation process, select Python.
  2. From the Cygwin terminal, install virtualenv as usual.
  3. Create a virtualenv for supervisord, and then install as usual:

    pip install supervisord 
  4. Configure supervisord in the usual way. Keep in mind that supervisord will be running with Cygwin, so you better use paths the Cygwin way (C:\myservers\project1 translates to /cygdrive/c/myservers/project1 in Cygwin).

  5. Now you probably want to install supervisord as a service. Here's how I do it:

    cygrunsrv --install supervisord --path /home/Administrator/supervisor/venv/bin/python --args "/home/Administrator/supervisor/venv/bin/supervisord -n -c /home/Administrator/supervisor/supervisord.conf" 
  6. Go to the Windows service manager and start the service supervisord that you just installed.

Point 5 installs supervisord as a Windows service, so that you can control it (start/stop/restart) from the Windows service manager. But the things that you can do with supervisorctl work as usual, meaning that you can simply deploy your old configuration file.

like image 125
dsign Avatar answered Sep 19 '22 17:09

dsign


You likely want to run your script as a Windows Service. To do so you'll need the python-win32 library. This question has a good description of how you go about doing this, as well as a bunch of links to other related resources. This question may also be of use.

A Windows Service is how you want to wrap up any script that needs to run continuously on Windows. They can be configured to automatically start on boot, and handle failures. Nothing is going to stop anyone from killing the process itself, but to handle that potential situation, you can just create a bat file and use the sc command to pole the service to see if it is running and if not restart the service. Just schedule the bat file to run every 60 seconds (or whatever is reasonable for your script to potentially be down).

like image 40
Mark Gemmill Avatar answered Sep 19 '22 17:09

Mark Gemmill