Mastering Screen
You probably familiar with manipulating screen operations in your screen sessions. How about “outside” the screen session? Here are some tips about it. If you’re interested, please have a look.
Manipulate Screen from Outer Space
Create screen session with a window running specified command:
screen -dmS testing -t shell bash
Turn on log:
screen -S testing -pshell -X logfile "/tmp/screen-pshell.log"
screen -S testing -pshell -X log on
Run command:
screen -S testing -pshell -X stuff 'ping 8.8.8.8\015'
Take a peek at screen window:
screen -S testing -pshell -X hardcopy $(tty)
Create new window in the screen session:
screen -S testing -X screen -t monitoring bash
Run command in previously created window:
screen -S testing -pmonitoring -X stuff 'htop\015'
Terminate foreground running process through keyboard interrupt:
screen -S testing -pshell -X stuff '\003'
Kill specific window of the screen:
screen -S testing -pshell -X kill
Quit entire screen Session:
screen -S testing -X quit
Okay, the aforementioned skills are useful enough. But why should I use them? Under what circumstances should I create a new window inside specific screen session? And I’ll provide an example below.
A More Complex Application
Suppose I want to run a command in foreground, say ping, and keep track of
its pid if it is running. Otherwise the failure message should be logged.
Though this scenario is a bit trivial, it help us get to understand how to
assemble the screen skills learnt above.
The service ping will success, and its pid is in ping.pid. The service
continues running on foreground:
screen -S testing -pshell -X stuff 'ping 8.8.8.8 & echo $! > ping.pid; fg || echo "ping failed to start" | tee "ping.failure"\015'
The service ping will fail, and the error message will be written in
ping.failure:
screen -S testing -pshell -X stuff 'ping 8.8.8. & echo $! > ping.pid; fg || echo "ping failed to start" | tee "ping.failure"\015'