Technical notes › List open ports with SwiftBar
Occasionally, I’ll accidentally leave a server running, or a parent process will crash and disown one of its children, and I’ll try to run something only to be met with “port already in use”.
So to keep an eye on which ports are being used, I wrote a SwiftBar script. SwiftBar is a macOS application that provides an easy way to put text and dropdown menus in the Menu Bar without having to learn the intricacies of Mac development.
The script is written in Ruby, because that’s the language I already know:
ports.5m.rb
— Download#!/usr/bin/env ruby require 'socket' PORTS = { 8500 => 'consul', 4646 => 'nomad', 8000 => 'project-one', 8080 => 'project-two', } opens, closeds = PORTS.partition do |port, str| Socket.tcp('localhost', port, connect_timeout: 1) { true } rescue false end if ENV['OS_APPEARANCE'] == 'Dark' menu_colour = '#aaaaaa' entry_colour = '#dddddd' else menu_colour = '#777777' entry_colour = '#333333' end puts "Ports: %d | size=10 color=%s" % [opens.length, menu_colour] puts "---" opens.each do |port, str| puts "%s: %s | size=11 color=%s" % [port, str, entry_colour] end
Now, whenever a port seems suspiciously in use, all I have to do is move my eyes to the menu bar and see what’s running.∎