Många har säkert hört talas om vertyg som Ansible, Puppet eller Chef. Kanske använder du till och med några av dessa verktyg? De är alla verktyg för att automatisera uppgifter på flera maskiner samtidigt. Tanken är att man utför ett kommando en gång, via en lokal dator, som sedan utförs på alla de maskiner som ingår i den specifika gruppen. Detta kan vara alltifrån två-tre servrar upp till flera hundra servrar.

Men ibland passar kanske inte dessa verktyg så bra, och andra gånger är dessa verktyg alltför avancerade för enklare uppgifter. Ett vanligt användningsområde för Ansible, Puppet och Chef är att automatisera uppdateringar över flera maskiner samtidigt, vilka dessa verktyg är väl anpassade för.

Själv testkör jag ofta C-program på olika plattformar (Linux, FreeBSD, OpenBSD, Solaris med flera på olika typer av hårdvara). I början testkörde jag programmen på en maskin i taget, men efter några veckor blev det i princip ohållbart och fruktansvärt långsamt.

Jag började då istället testa verktg som Ansible, Puppet och Chef. Men inget att dessa verktyg lyckades jag få att fungera just som jag ville, för mina behov att testköra program. Ett av de stora hindren var att olika program jag testkör kräver olika former av indata. Ibland är det data från textfiler, ibland pipad data, ibland svar på frågor från programmen.

Efter lite sökningar på internet upptäckte jag istället att tmux har inbyggt stöd för att synkronisera sina fönster. På sätt kan jag öppna tio styck fönster i tmux, logga in varje fönster på respektive maskin, och sedan synkronisera fönsterna. Det jag då skriver i ett fönster, skrivs autoamtiskt i alla de övriga fönsterna. Jag behöver då bara skriva make en gång, ./testprogram1 en gång och så vidare. Jag ser dessutom direkt utdatan från programmen direkt i de olika fönstren. Likaså kan jag skriva in svaren från alla programmen samtidigt, istället för att byta fönster tio gånger. Mycket smidigt!

Kort instruktion

  1. Starta tmux
  2. Skapa så många fönster du behöver med CTRL-B " och CTRL-B &. Har du bundit om CTRL-B till CTRL-A istället så använd det istället
  3. Logga in på de olika maskinerna med SSH, en maskin i vardera fönster
  4. Synkronisera alla fönster genom att:
    • Tryck CTRL-B : så att du får upp en kommandorad i tmux
    • Skriv setw synchronize-panes on och tryck enter
  5. Klart! Det du skriver i ett fönster skrivs nu automatiskt i alla fönster
  6. För att ta bort synkroniseringen av fönster gör samma som ovan men skriv istället setw synchronize-panes off i kommandoraden.

Demo

Så här kan det det ut så när jag är i full gång med tester.

Tmux