Jake Worth

Jake Worth

Tmux Application Startup Script

Published: July 28, 2022 2 min read

  • tmux

My development environment depends on several processes running. Here’s how I’ve scripted this setup.

Whenever I boot up, I need at least these processes running:

  • Sidekiq (jobs)
  • Rails (API)
  • Webpack (frontend)
  • Docker (containers)

Here’s how I’ve scripted it:

#!/bin/bash

tmux new-window -n sidekiq
tmux send-keys -t sidekiq 'sidekiq' Enter

tmux new-window -n rails
tmux send-keys -t rails 'rails s' Enter

tmux new-window -n webpack
tmux send-keys -t webpack 'bin/webpack' Enter

tmux new-window -n docker
tmux send-keys -t docker 'bin/docker' Enter

open http://host.docker.internal:3000/

This starts each process in its own named Tmux window, then opens the application in my browser. That last step is a losing race condition with the other processes, which are still booting, but I just wait a few seconds and refresh the browser tab.

Something I tried previously was opening each window with a command, like this:

tmux new-window 'rails s'

This sends rails s to the new window, helpfully naming the window rails s. The downside of this otherwise great command is that when the process completes, the window closes. Kill your server once, and you lose the window.

Conclusion

There are more sophisticated approaches, but this gets the job done for a tricky dev environment. How do you script your application startup?

What are your thoughts on this? Let me know!


Join 100+ engineers who subscribe for advice, commentary, and technical deep-dives into the world of software.