Process manager for Procfile-based applications and tmux

Overmind

Release Build Status

Overmind is a process manager for Procfile-based applications and tmux. With Overmind, you can easily run several processes from your Procfile in a single terminal.

Procfile is a simple format to specify types of processes your application provides (such as web application server, background queue process, front-end builder) and commands to run those processes. It can significantly simplify process management for developers and is used by popular hosting platforms, such as Heroku and Deis. You can learn more about the Procfile format here.

There are some good Procfile-based process management tools, including foreman by David Dollar, which started it all. The problem with most of those tools is that processes you want to manage start to think they are logging their output into a file, and that can lead to all sorts of problems: severe lagging, losing or breaking colored output. Tools can also add vanity information (unneeded timestamps in logs). Overmind was created to fix those problems once and for all.

See this article for a good intro and all the juicy details! Introducing Overmind and Hivemind

Sponsored by Evil Martians

Overmind features

You may know several Procfile process management tools, but Overmind has some unique, extraterrestrial powers others don't:

  • Overmind starts processes in a tmux session, so you can easily connect to any process and gain control over it;
  • Overmind can restart a single process on the fly β€” you don't need to restart the whole stack;
  • Overmind allows a specified process to die without interrupting all of the other ones;
  • Overmind can restart a specified processes automatically when they die;
  • Overmind uses tmux's control mode to capture process output β€” so it won't be clipped, delayed, and it won't break colored output;
  • Overmind can read environment variables from a file and use them as parameters so that you can configure Overmind behavior globally and/or per directory.

If a lot of those features seem like overkill for you, especially the tmux integration, you should take a look at Overmind's little sister β€” Hivemind!

Overmind screenshot

Installation

Note: At the moment, Overmind supports Linux, *BSD, and macOS only.

Overmind works with tmux, so you need to install it first:

# on macOS (with homebrew)
$ brew install tmux

# on Ubuntu
$ apt-get install tmux

Note: You can find installation manual for other systems here: https://github.com/tmux/tmux

There are three ways to install Overmind:

With Homebrew (macOS)

brew install overmind

Download the latest Overmind release binary

You can download the latest release here.

Build Overmind from source

You need Go 1.12 or later to build the project.

$ GO111MODULE=on go get -u github.com/DarthSim/overmind/v2

Note: You can update Overmind the same way.

Usage

In short: You can get help by running overmind -h and overmind help [command].

Running processes

Overmind reads the list of processes you want to manage from a file named Procfile. It may look like this:

web: bin/rails server
worker: bundle exec sidekiq
assets: gulp watch

To get started, you just need to run Overmind from your working directory containing a Procfile:

$ overmind start

You can also use the short alias:

$ overmind s

Specifying a Procfile

If a Procfile isn't located in your working directory, you can specify the exact path:

$ overmind start -f path/to/your/Procfile
$ OVERMIND_PROCFILE=path/to/your/Procfile overmind start

Specifying the ports

Overmind sets environment variable PORT for each process in your Procfile so that you can do things like this:

web: bin/rails server -p $PORT

Overmind assigns the port base (5000 by default) to PORT for the first process and increases PORT by port step (100 by default) for the each next one. You can specify port base and port step like this:

$ overmind start -p 3000 -P 10
$ OVERMIND_PORT=3000 OVERMIND_PORT_STEP=10 overmind start

Disabling PORT variable

If you don't want Overmind to set PORT variable, you can disable it:

$ overmind start -N
$ OVERMIND_NO_PORT=1 overmind start

Running only the specified processes

You can specify the names of processes you want to run:

$ overmind start -l web,sidekiq
$ OVERMIND_PROCESSES=web,sidekiq overmind start

Not running the specified processes

Similar to the above, if there are some processes in the Procfile that you do not want to run:

$ overmind start -x web,sidekiq
$ OVERMIND_IGNORED_PROCESSES=web,sidekiq overmind start

This takes precedence over the previous -l flag. i.e. if you:

$ overmind start -l web -x web
$ OVERMIND_IGNORED_PROCESSES=web OVERMIND_PROCESSES=web overmind start

Nothing will start.

Scaling processes (formation)

By default, Overmind starts one instance of each process, but you can set the number of each process instances to run:

$ overmind start -m web=2,worker=5
$ OVERMIND_FORMATION=web=2,worker=5 overmind start

There is a special name all that you can use to scale all processes at once:

$ overmind start -m all=2,worker=5
$ OVERMIND_FORMATION=all=2,worker=5 overmind start

If you set instances number of some process to zero, this process won't be run:

$ overmind start -m some_production_task=0
$ OVERMIND_FORMATION=some_production_task=0 overmind start

Processes that can die

Usually, when a process dies, Overmind will interrupt all other processes. However, you can specify processes that can die without interrupting all other ones:

$ overmind start -c assets,npm_install
$ OVERMIND_CAN_DIE=assets,npm_install overmind start

Auto-restarting processes

If some of your processes tend to randomly crash, you can tell Overmind to restart them automatically when they die:

$ overmind start -r rails,webpack
$ OVERMIND_AUTO_RESTART=rails,webpack overmind start

Specifying the colors

Overmind colorizes process names with different colors. May happen that these colors don't match well with your color scheme. In this case, you can define your own colors using xterm color codes:

$ overmind start -b 123,123,125,126,127
$ OVERMIND_COLORS=123,123,125,126,127 overmind start

If you want Overmind to always use these colors, you can specify them in the environment file located in your home directory.

Connecting to a process

If you need to gain access to process input, you can connect to its tmux window:

$ overmind connect [process_name]

You can safely disconnect from the window by hitting Ctrl b and then d.

Restarting a process

You can restart a single process without restarting all the other ones:

$ overmind restart sidekiq

You can restart multiple processes the same way:

$ overmind restart sidekiq assets

It's also possible to use wildcarded process names:

$ overmind restart 'sidekiq*'

When the command is called without any arguments, it will restart all the processes.

Stopping a process

You can stop a single process without stopping all the other ones:

$ overmind stop sidekiq

You can stop multiple processes the same way:

$ overmind stop sidekiq assets

It's also possible to use wildcarded process names:

$ overmind stop 'sidekiq*'

When the command is called without any arguments, it will stop all the processes without stopping Overmind itself.

Killing processes

If something goes wrong, you can kill all running processes:

$ overmind kill

Overmind environment

If you need to set specific environment variables before running a Procfile, you can specify them in the .overmind.env file in the current working directory, your home directory, or/and in the .env file in in the current working directory. The file should contain variable=value pairs, one per line:

PATH=$PATH:/additional/path
OVERMIND_CAN_DIE=npm_install
OVERMIND_PORT=3000

For example, if you want to use a separate Procfile.dev by default on a local environment, create .overmind.env file with OVERMIND_PROCFILE=Procfile.dev. Now, Overmind uses Procfile.dev by default.

You can specify additional env file to load with OVERMIND_ENV variable:

$ OVERMIND_ENV=path/to/env overmind s

The files will be loaded in the following order:

  • ~/.overmind.env
  • ./.overmind.env
  • ./.env
  • $OVERMIND_ENV

You can also opt to skip loading the .env file entirely (.overmind.env will still be read) by setting the variable OVERMIND_SKIP_ENV.

Running a command in the Overmind environment

Since you set up an environment with .env files, you may want to run a command inside this environment. You can do this using run command:

$ overmind run yarn install

Run as a daemon

Overmind can be run as a daemon:

$ overmind start -D
$ OVERMIND_DAEMONIZE=1 overmind start

Use echo command for the logs:

$ overmind echo

You can quit daemonized Overmind with quit:

$ overmind quit

Specifying a socket

Overmind receives commands via a Unix socket. Usually, it opens a socket named .overmind.sock in a working directory, but you can specify the full path:

$ overmind start -s path/to/socket
$ OVERMIND_SOCKET=path/to/socket overmind start

All other commands support the same flag:

$ overmind connect -s path/to/socket web
$ overmind restart -s path/to/socket sidekiq
$ overmind kill -s path/to/socket

Using TCP network

Overmind can bind its command center to a TCP address instead of Unix socket. It is useful when you run it on a remote machine.

$ overmind start -s "0.0.0.0:4321" -S "tcp"
$ OVERMIND_SOCKET="0.0.0.0:4321" OVERMIND_NETWORK="tcp" overmind start

You need to pass the same flags to other commands:

$ overmind connect -s "0.0.0.0:4321" -S "tcp" web

Known issues

Overmind uses system Ruby/Node/etc instead of custom-defined one

This may happen if your Ruby/Node/etc version manager isn't configured properly. Make sure that the path to your custom binaries is included in your PATH before the system binaries path.

Overmind does not stop Docker process properly

Unfortunately, this is how Docker works. When you send SIGINT to a docker run ... process, it just detaches container and exits. You can solve this by using named containers and signal traps:

mydocker: trap 'docker stop mydocker' EXIT > /dev/null; docker run --name mydocker ...

Overmind can't start because of bind: invalid argument error

All operating systems have limitations on Unix socket path length. Try to use a shorter socket path.

Overmind exits after pg_ctl --wait start and keeps PostgreSQL server running

Since version 12.0 pg_ctl --wait start exits right after starting the server. Just use postgres command directly.

Author

Sergey "DarthSim" Aleksandrovich

Highly inspired by Foreman.

Many thanks to @antiflasher for the awesome logo.

License

Overmind is licensed under the MIT license.

See LICENSE for the full license text.

Owner
Sergey Alexandrovich
Kendo-mouse from Mars
Sergey Alexandrovich
Comments
  • Overmind Crashing on MacOS big Sur

    Overmind Crashing on MacOS big Sur

    After upgrading to macOS big Sur overmind started getting crashed. I tried reinstalling using brew but it still crashes.

    I was not able to see any crash log/error message to further debug it.

    System configuration

    overmind version: 2.2.0 tmux version: 3.1c

    OS Config: ProductName: macOS ProductVersion: 11.2.1 BuildVersion: 20D74

  • Overmind attempts to run processes using wrong version of ruby?

    Overmind attempts to run processes using wrong version of ruby?

    Hi! I'd like to report an issue that I'm having and it stops me from using overmind. I have used foreman for years and I heard of overmind a couple of months ago.

    I use tmux and fish shell. Here is the output I'm seeing when attempting to run overmind start

    system  | Tmux socket name: overmind-project-Lm39zBQtTL86k07DQvPKu-
    system  | Tmux session ID: project
    system  | Listening at /Users/efigarola/workspace/project/.overmind.sock
    web     | Started with pid 26814...
    web     | /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- bundler (LoadError)
    web     |       from /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    web     |       from /Users/efigarola/workspace/project/bin/spring:9:in `<top (required)>'
    web     |       from bin/rails:5:in `load'
    web     |       from bin/rails:5:in `<main>'
    web     | Exited
    

    Here are some details of my machine:

    • OS: MacOS Mojave 10.14.6
    • Overmind 2.0.3
    • tmux: 2.9a

    Procfile:

    web: bin/rails s -p $PORT
    redis: redis-server
    sidekiq: bundle exec sidekiq -q default -q mailers
    webpack: bin/webpack-dev-server
    

    Gem ENV outside tmux:

    RubyGems Environment:
      - RUBYGEMS VERSION: 3.0.6
      - RUBY VERSION: 2.5.1 (2018-03-29 patchlevel 57) [x86_64-darwin18]
      - INSTALLATION DIRECTORY: /Users/efigarola/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0
      - USER INSTALLATION DIRECTORY: /Users/efigarola/.gem/ruby/2.5.0
      - RUBY EXECUTABLE: /Users/efigarola/.rbenv/versions/2.5.1/bin/ruby
      - GIT EXECUTABLE: /usr/bin/git
      - EXECUTABLE DIRECTORY: /Users/efigarola/.rbenv/versions/2.5.1/bin
      - SPEC CACHE DIRECTORY: /Users/efigarola/.gem/specs
      - SYSTEM CONFIGURATION DIRECTORY: /Users/efigarola/.rbenv/versions/2.5.1/etc
      - RUBYGEMS PLATFORMS:
        - ruby
        - x86_64-darwin-18
      - GEM PATHS:
         - /Users/efigarola/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0
         - /Users/efigarola/.gem/ruby/2.5.0
      - GEM CONFIGURATION:
         - :update_sources => true
         - :verbose => true
         - :backtrace => false
         - :bulk_threshold => 1000
         - "gem" => "--no-document"
      - REMOTE SOURCES:
         - https://rubygems.org/
      - SHELL PATH:
         - /Users/efigarola/.rbenv/versions/2.5.1/bin
         - /usr/local/Cellar/rbenv/1.1.2/libexec
         - /Users/efigarola/.rbenv/shims
         - /Users/efigarola/.rbenv/bin
         - /usr/local/bin
         - /usr/bin
         - /bin
         - /usr/sbin
         - /sbin
    

    Gem env inside tmux:

    RubyGems Environment:
      - RUBYGEMS VERSION: 3.0.6
      - RUBY VERSION: 2.5.1 (2018-03-29 patchlevel 57) [x86_64-darwin18]
      - INSTALLATION DIRECTORY: /Users/efigarola/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0
      - USER INSTALLATION DIRECTORY: /Users/efigarola/.gem/ruby/2.5.0
      - RUBY EXECUTABLE: /Users/efigarola/.rbenv/versions/2.5.1/bin/ruby
      - GIT EXECUTABLE: /usr/bin/git
      - EXECUTABLE DIRECTORY: /Users/efigarola/.rbenv/versions/2.5.1/bin
      - SPEC CACHE DIRECTORY: /Users/efigarola/.gem/specs
      - SYSTEM CONFIGURATION DIRECTORY: /Users/efigarola/.rbenv/versions/2.5.1/etc
      - RUBYGEMS PLATFORMS:
        - ruby
        - x86_64-darwin-18
      - GEM PATHS:
         - /Users/efigarola/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0
         - /Users/efigarola/.gem/ruby/2.5.0
      - GEM CONFIGURATION:
         - :update_sources => true
         - :verbose => true
         - :backtrace => false
         - :bulk_threshold => 1000
         - "gem" => "--no-document"
      - REMOTE SOURCES:
         - https://rubygems.org/
      - SHELL PATH:
         - /Users/efigarola/.rbenv/versions/2.5.1/bin
         - /usr/local/Cellar/rbenv/1.1.2/libexec
         - /Users/efigarola/.rbenv/shims
         - /Users/efigarola/.rbenv/bin
         - /usr/local/bin
         - /usr/bin
         - /bin
         - /usr/sbin
         - /sbin
         - /Users/efigarola/.rbenv/shims
    

    I noticed in the error shown by overmind that it attempts to use ruby 2.3 which is not the version I'm using in my project, I use rbenv for managing my ruby environment and both the local and global version of ruby are 2.5.1

    Any ideas on what I'm missing? foreman works and running tmux new bin/rails s also works. I have really liked what overmind has to offer and that's why I decided to migrate from foreman

  • `bin_path': can't find gem bundler (>= 0.a) (Gem::GemNotFoundException)

    `bin_path': can't find gem bundler (>= 0.a) (Gem::GemNotFoundException)

    Hello.

    I'm using overmind 1.0.8.2 and I'm running into the following issue (whereas hivemind works fine):

    $ overmind s
    system  | Listening at /Users/nick/foo/.overmind.sock
    system  | Tmux session ID: overmind-foo-g3jF6FDXO09mWh6GsNV2UyIZQ1TQu5Km
    webpack | Started with pid 26093...
    rails   | Started with pid 26096...
    rails   | /Users/agis/.rubies/ruby-2.3.3/lib/ruby/2.3.0/rubygems.rb:241:in `bin_path': can't find gem bundler (>= 0.a) (Gem::GemNotFoundException)
    rails   |       from /Users/agis/.gem/ruby/2.3.3/bin/bundle:22:in `<main>'
    rails   |
    rails   | Exited
    webpack | Interrupting...
    webpack |
    webpack | Exited
    

    I'm using ruby 2.3 with chruby along with the relevant activation steps in my ~/.bash_profile, notably:

    source /usr/local/share/chruby/chruby.sh
    source /usr/local/share/chruby/auto.sh
    chruby 2.3.3
    

    I'm doing this from within an existing tmux session. However I also tried outside of a tmux session.

    • 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin15]
    • tmux 2.5
    • macOS 10.12.16
    • overmind 1.0.8.2 (installed with brew)
    • iTerm2 3.1.2

    Again, hivemind works fine.

    Thanks in advance!

  • listen unix ./.overmind.sock: bind: operation not supported

    listen unix ./.overmind.sock: bind: operation not supported

    I'm trying to setup Overmind on the WSL (Linux inside Windows) Ubuntu 16.04. And, after this command:

    root@big-pc:/mnt/c/rails/vizmarket# overmind s

    I've got an error:

    system    | Tmux socket name: overmind-vizmarket-f2ZGVMrcSIdyY0QKfLB0X_
    system    | Tmux session ID: vizmarket
    system    | Listening at ./.overmind.sock
    overmind: listen unix ./.overmind.sock: bind: operation not supported
    

    What should I do to make it works?

  • "width too small" error

    I have an utterly strange situation.

    If I run:

    docker run -ti myimage
    

    it will run fine, but if I do

    docker create --name somename -t myimage
    

    it will always fail with:

    system | Listening at /app/.overmind.sock
    system | Tmux socket name: overmind-app-VfOudhxLnV5Al0JUBqvAlq
    system | Tmux session ID: app
    web    | width too small
    web    | 
    

    I wonder if this is really https://github.com/moby/moby/issues/25450 - but maybe some parameters may be passed to tmux in order to avoid it?

  • Hint to remove .overmind.sock

    Hint to remove .overmind.sock

    In some cases you can have a leftover .overmind.sock file but without a running overmind process. I think in my case this was caused by a computer restart while it was running. It would be nice if the error you get when trying to reboot overmind would prompt you to remove the file if you know that it's not currently running.

    Current message:

    overmind: listen unix /Users/joekur/dev/reverb/.overmind.sock: bind: address already in use

    As an example, zeus (https://github.com/burke/zeus) gives this message:

    Unable to accept socket connection. It looks like Zeus is already running. If not, remove .zeus.sock and try again.

  • go get: installing executables with 'go get' in module mode is deprecated.

    go get: installing executables with 'go get' in module mode is deprecated.

    Hi, I got this error while running GO111MODULE=on go get -u github.com/DarthSim/overmind/v2 as instructed on the README when building from source.

    bash-5.1# GO111MODULE=on go get -u github.com/DarthSim/overmind/v2
    go: downloading github.com/DarthSim/overmind/v2 v2.2.2
    go: downloading github.com/DarthSim/overmind v2.0.1+incompatible
    go: downloading github.com/urfave/cli v1.22.2
    go: downloading github.com/DarthSim/godotenv v1.3.1
    go: downloading github.com/matoous/go-nanoid v0.0.0-20181114085210-eab626deece6
    go: downloading github.com/sevlyar/go-daemon v0.1.5
    go: downloading github.com/urfave/cli v1.22.9
    go: downloading golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a
    go: downloading github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d
    go: downloading github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0
    go: downloading github.com/cpuguy83/go-md2man/v2 v2.0.2
    go: downloading github.com/cpuguy83/go-md2man v1.0.10
    go: downloading golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e
    go: downloading github.com/matoous/go-nanoid v1.5.0
    go: downloading github.com/russross/blackfriday/v2 v2.0.1
    go: downloading golang.org/x/crypto v0.0.0-20220517005047-85d78b3ac167
    go: downloading github.com/russross/blackfriday/v2 v2.1.0
    go: downloading golang.org/x/sys v0.0.0-20220513210249-45d2b4557a2a
    go: downloading github.com/russross/blackfriday v1.6.0
    go: downloading github.com/shurcooL/sanitized_anchor_name v1.0.0
    go: downloading golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1
    go: downloading golang.org/x/term v0.0.0-20220411215600-e5f449aeb171
    go get: installing executables with 'go get' in module mode is deprecated.
    	Use 'go install pkg@version' instead.
    	For more information, see https://golang.org/doc/go-get-install-deprecation
    	or run 'go help get' or 'go help install'.
    

    Using 'go install' instead of 'go get' worked for me GO111MODULE=on go install github.com/DarthSim/overmind@v2.

    bash-5.1# GO111MODULE=on go install github.com/DarthSim/overmind@v2
    go: finding module for package gopkg.in/urfave/cli.v1
    go: finding module for package github.com/pkg/term/termios
    go: finding module for package github.com/joho/godotenv
    go: finding module for package github.com/matoous/go-nanoid
    go: downloading gopkg.in/urfave/cli.v1 v1.20.0
    go: downloading github.com/joho/godotenv v1.4.0
    go: downloading github.com/pkg/term v1.1.0
    go: found github.com/joho/godotenv in github.com/joho/godotenv v1.4.0
    go: found gopkg.in/urfave/cli.v1 in gopkg.in/urfave/cli.v1 v1.20.0
    go: found github.com/matoous/go-nanoid in github.com/matoous/go-nanoid v1.5.0
    go: found github.com/pkg/term/termios in github.com/pkg/term v1.1.0
    go: downloading golang.org/x/sys v0.0.0-20200909081042-eff7692f9009
    bash-5.1# 
    

    Just incase somebody else had the same issue πŸ™‚

  • overmind: Can't find tmux.

    overmind: Can't find tmux.

    I'm on MacOS 10.15.7 and I installed overmind from brew which install tmux dependencies automatically.

    $ which tmux
    /usr/local/bin/tmux
    
    $ tmux -V
    tmux 3.1c
    
    $ overmind -v
    Overmind version 2.2.0
    

    But when I try to launch overmind s, I still get the error:

    overmind: Can't find tmux. Did you forget to install it?
    
  • Overmind is crashing tmux on ^C

    Overmind is crashing tmux on ^C

    If I fire up a bunch of processes, and hit ^C, overmind generally stops the underlying processes and everything is fine.

    Beginning with a recent update to tmux (v3.2a), it has started causing tmux to crash, and overmind exits with the error "overmind: Tmux client unexpectidly exited". (the mispelling here was recently fixed, thanks!)

    When I strace the processes, I see tmux is segfaulting

    [pid 1708098] --- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x110} ---
    [pid 1708098] +++ killed by SIGSEGV +++
    

    This happens on both macOS and Linux machines with the latest versions of tmux. I am unable to reproduce it with versions prior to tmux 3.

    I recompiled tmux to force logging, and it looks like the tmux client dies, a new one is spawned, but it can't connect, and then everything dies.

    first client:

    ==> tmux-client-1725271.log <==
    1629137113.489688 cmd_pack_argv: argv[271]=-P
    1629137113.489690 cmd_pack_argv: argv[272]=-F
    1629137113.489693 cmd_pack_argv: argv[273]=%overmind-process #{pane_id} #{window_name} #{pane_pid}
    1629137113.489696 cmd_pack_argv: argv[274]=/tmp/overmind-github-x8_n2_bZ-ZxCnk6mLszW9J/aqueduct-bridge
    1629137113.489698 cmd_pack_argv: argv[275]=;
    1629137113.489708 sending message 200 to peer 0x55f3c8c0b8d0 (4536 bytes)
    1629137113.489720 client loop enter
    1629137113.489748 client_signal: Child exited
    1629137113.971429 client_signal: Interrupt
    1629137113.993676 client loop exit
    

    second client:

    ==> tmux-client-1725969.log <==
    1629137113.996576 client started (1725969): version next-3.3, socket /tmp/tmux-1001/overmind-github-x8_n2_bZ-ZxCnk6mLszW9J, protocol 8
    1629137113.996595 on Linux 4.9.0-16-amd64 #1 SMP Debian 4.9.272-2 (2021-07-19)
    1629137113.996600 using libevent 2.0.21-stable (poll); ncurses 6.0
    1629137113.996618 flags are 0x8010000
    1629137113.996622 socket is /tmp/tmux-1001/overmind-github-x8_n2_bZ-ZxCnk6mLszW9J
    1629137113.996629 trying connect
    1629137113.996639 connect failed: Connection refused
    

    server:

    ==> tmux-server-1725277.log <==
    1629137113.993069 server_client_check_pane_buffer: pane %9 is off
    1629137113.993072 server_client_check_pane_buffer: client-1725271 has 168 bytes used and 0 left for %10
    1629137113.993075 server_client_check_pane_buffer: %10 has 168 minimum (of 168) bytes used
    1629137113.993078 server_client_check_pane_buffer: pane %10 is off
    1629137113.993082 server_client_check_pane_buffer: client-1725271 has 168 bytes used and 0 left for %11
    1629137113.993085 server_client_check_pane_buffer: %11 has 168 minimum (of 168) bytes used
    1629137113.993087 server_client_check_pane_buffer: pane %11 is off
    1629137113.993138 control_write_callback: client-1725271: 8192 bytes available, 10 panes
    1629137113.993142 control_check_age: client-1725271: %0 is 21 behind
    1629137113.993146 control_write_pending: client-1725271: output block 487 (age 21) for %0 (used 0/273)
    

    I think there is a race condition somewhere, and I am having trouble nailing it down - any help would be appreciated. I'll open an issue over at tmux/tmux if I can reproduce this without overmind (which I have not yet been able to do).

  • overmind weird behaviors

    overmind weird behaviors

    Hey all ! I'm sorry to bother you but since I upgraded overmind from 1.X to the last version (2.0.3). It behaves weirdly.

    First it does not log the combined output of all commands when launched with overmind start -f Procfile.dev -p 3000. Second, the restart does not really restart the commands, it is stuck indefinitely (tmux version 2.9a).

    Did I do something wrong ? Is there something I could do to help me/you debug ?

  • Allow to specify custom env file

    Allow to specify custom env file

    Basically, if one has more than one .env file, it'd be great to be able to specify which file to use (i.e. foeman's -e option). Moreover, maybe I'm wrong, but when you have more than one project the global ~/.overmind.env seems to be quite a weird solution.

  • Gracefully handle backgrounded processes

    Gracefully handle backgrounded processes

    Kinda similar to some of the other issues on here. rubocop --start-server always runs daemonized, which kills the other processes. In this case, there's no signal to trap, since it's just spawning another process.

    Hopefully the issue will be remedied soon on their side soon, as they have a pull request open: https://github.com/rubocop/rubocop/pull/11319

    But I think a lot of folks would benefit from some type of solution for this -- whether it's before/after hooks, process order, process dependencies, or something else.

    My workaround:

    OVERMIND_CAN_DIE=rubocop rubocop --start-server

    This isn't a great workaround, because the server continues running even after Overmind has shutdown.

    image

    But you can see the rubocop server running:

    image

    Here, you can see all processes running: (I guess it's a separate issue, but there are two of each of them) image

    After overmind stop: image

  • Fix README instruction for go installation

    Fix README instruction for go installation

    The "Build Overmind from source" was not up to date with the latest go options. The -u flag is not available anymore. After a bit of digging I got the install working by using go install github.com/DarthSim/overmind/v2@latest. Thought I'd contribute to avoid this hassle for future newcomers πŸ™‚

  • Permission denied running with docker

    Permission denied running with docker

    Hi, I am trying to replace foreman with overmind. All my dev setup is running with Docker evilmartians/ruby-on-whales setup. To get overmind running I add some changes to my Dockerfile

    1. Add go
    COPY --from=golang:1.19.1-bullseye /usr/local/go/ /usr/local/go/
    
    ENV GOPATH=$HOME/go
    ENV PATH $PATH:/usr/local/go/bin:$GOPATH/bin
    
    1. Install tmux using apt-get
    2. Install overmind:
    RUN go install github.com/DarthSim/overmind/v2@latest
    

    This is working, but when I try to start all Processes I get Permission denied πŸ˜” shot2022-09-30 at 10 55 20@2x

    What am I doing wrong?

    Thanks

  • Apply remain-on-exit tmux option only to windows created by overmind

    Apply remain-on-exit tmux option only to windows created by overmind

    Hello :wave: thank you for creating overmind, I really appreciate this tool πŸ₯‡ I'm an avid tmux user and I usually run overmind as a daemon. I start my web server and stuff, run overmind connect and do all my work right there in that tmux session where I can have everything in one place thanks to overmind πŸ™‚

    However, I noticed the remain-on-exit tmux option being set globally using setw -g and it's making all the windows I open inherit this setting. Looks like it's possible to make remain-on-exit only apply to windows that overmind created with this simple change I made. I imagine this would save the trouble of dealing with Pane is dead messages for someone looking at some logs with overmind connect and quickly wanting to do something in the same tmux session :grin: The -p flag restricts this setting to the pane, so it'll make it possible to even do some work in a split pane in the same windows as process run by overmind.

    Thanks again and let me know if you'd be open to this change :blush:

Manage Procfile-based applications

Foreman Manage Procfile-based applications Installation $ gem install foreman Ruby users should take care not to install foreman in their project's G

Dec 30, 2022
Weave Ignite is an open source Virtual Machine (VM) manager with a container UX and built-in GitOps management.
Weave Ignite is an open source Virtual Machine (VM) manager with a container UX and built-in GitOps management.

Weave Ignite is an open source Virtual Machine (VM) manager with a container UX and built-in GitOps management.

Nov 16, 2021
This vitual os application consist of 3 mini applications embedded in it like weather app , text editor and calculator .

Virtual-Operating-System This vitual os application consist of 3 mini applications embedded in it like weather app , text editor and calculator . APPS

Nov 11, 2021
Create virtual machines and run Linux-based operating systems in Go using Apple Virtualization.framework.

vz - Go binding with Apple Virtualization.framework vz provides the power of the Apple Virtualization.framework in Go.

Jan 9, 2023
A bytecode-based virtual machine to implement scripting/filtering support in your golang project.

eval-filter Implementation Scripting Facilities Types Built-In Functions Conditionals Loops Functions Case/Switch Use Cases Security Denial of service

Dec 30, 2022
Expr – a tiny stack-based virtual machine written in Go

Expr – a tiny stack-based virtual machine written in Go The executor is designed to interpret a simple expression language and it's useful in delegati

Nov 11, 2022
An interpreter written in go for a brainfuck-based language called €*

eurostar-go-interpreter This is an interpreter written in go for a brainfuck-bas

Sep 14, 2022
TinyGo drivers for sensors and other devices that use I2C, SPI, GPIO, ADC, and UART interfaces.

TinyGo Drivers This package provides a collection of hardware drivers for devices such as sensors and displays that can be used together with TinyGo.

Jan 8, 2023
❄️ Elsa is a minimal, fast and secure runtime for JavaScript and TypeScript written in Go

Elsa Elsa is a minimal, fast and secure runtime for JavaScript and TypeScript written in Go, leveraging the power from QuickJS. Features URL based imp

Jan 7, 2023
Interactive Go interpreter and debugger with REPL, Eval, generics and Lisp-like macros

gomacro - interactive Go interpreter and debugger with generics and macros gomacro is an almost complete Go interpreter, implemented in pure Go. It of

Dec 30, 2022
The Humboldt Web Framework and Toolkit. Using this as an interpeter and server, build webistes in an MVC pattern using Lua.

Humboldt Web Framework Humboldt is a framework written in Go using Lua files to build web applications. What is this framework for? People who want to

Jan 21, 2022
Gentee - script programming language for automation. It uses VM and compiler written in Go (Golang).

Gentee script programming language Gentee is a free open source script programming language. The Gentee programming language is designed to create scr

Dec 15, 2022
GopherLua: VM and compiler for Lua in Go

GopherLua: VM and compiler for Lua in Go. GopherLua is a Lua5.1 VM and compiler written in Go. GopherLua has a same goal with Lua: Be a scripting lang

Dec 31, 2022
An experimental port of TinyRb to Google go, both as a means of learning go and exploring alternate approaches to implementing Ruby. Work is currently focused on the GoLightly VM.

tinyrbΒΆ ↑ A tiny subset of Ruby with a Lua'esc VM. Everything in TinyRb should run in the big Ruby. (except bugs and things that don't comply to the p

Sep 22, 2022
A shell parser, formatter, and interpreter with bash support; includes shfmt

sh A shell parser, formatter, and interpreter. Supports POSIX Shell, Bash, and mksh. Requires Go 1.14 or later. Quick start To parse shell scripts, in

Jan 8, 2023
Go compiler made from scratch, which can compile itself. It's going to be the smallest and simplest go compiler in the world.

Babygo, a go compiler made from scratch Babygo is a small and simple go compiler. (Smallest and simplest in the world, I believe.) It is made from scr

Jan 8, 2023
Small Clojure interpreter, linter and formatter.
Small Clojure interpreter, linter and formatter.

Joker is a small Clojure interpreter, linter and formatter written in Go. Installation On macOS, the easiest way to install Joker is via Homebrew: bre

Dec 30, 2022
Go bindings to QuickJS: a fast, small, and embeddable ES2020 JavaScript interpreter.

quickjs Go bindings to QuickJS: a fast, small, and embeddable ES2020 JavaScript interpreter. These bindings are a WIP and do not match full parity wit

Dec 28, 2022
Floppa programming language inspired by the brainf*ck programming language. Created just for fun and you can convert your brainf*ck code to floppa code.

Floppa Programming Language Created just for fun. But if you want to contribute, why not? Floppa p.l. inspired by the brainf*ck programming language.

Oct 20, 2022