Automatisera med tmux
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
- Starta
tmux
- Skapa så många fönster du behöver med
CTRL-B "
ochCTRL-B &
. Har du bundit omCTRL-B
tillCTRL-A
istället så använd det istället - Logga in på de olika maskinerna med SSH, en maskin i vardera fönster
- Synkronisera alla fönster genom att:
- Tryck
CTRL-B :
så att du får upp en kommandorad itmux
- Skriv
setw synchronize-panes on
och tryck enter
- Tryck
- Klart! Det du skriver i ett fönster skrivs nu automatiskt i alla fönster
- 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.
Relaterat
Senaste nyheterna och inläggen
CyberInfo Sverige är ett IT-företag i nordvästra Skåne som tillhandahåller böcker, utbildningar, nyheter och konsulttjänster inom Linux, BSD och programmering.
CyberInfo Sverige är godkänd för F-skatt, är momsregistrerat och innehar
utgivningsbevis för webbplatsen www.cyberinfo.se.