When I carried out my first Exadata patching, I came across ‘Linux Screen‘ in the documentation, which Oracle recommended to use when patching:
“It’s recommended to run the dbnodeupdate.sh session using the Linux ‘screen’ or ‘vnc’ utility such that when a network problem breaks the connection to the server the patching session continues.”
Basically ‘Linux Screen‘ allows you to:
- Have a shell that can be reconnected to if you lose your connection due to network break, accidental close of terminal, the machine running the terminal crashes, etc. We’ve all been there, but now you can have the ability to protect yourself from these issues 🙂
- Disconnect from your screen session and reconnect to the same session at a later point in time, i.e. disconnect at the office, go home, reconnect when back home or kick off a long batch, disconnect, reconnect later to see if it’s completed.
- Open multiple windows within the one screen session.
Install Linux Screen
Linux screen is available from Oracle and can be downloaded via Oracle Public-yum:
[root@v1ex1dbadm01 ~]# yum install screen Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package screen.x86_64 0:4.0.3-19.el6 will be installed --> Finished Dependency Resolution Dependencies Resolved ============================================================================================================================================================================================================================================== Package Arch Version Repository Size ============================================================================================================================================================================================================================================== Installing: screen x86_64 4.0.3-19.el6 ol6_latest 494 k Transaction Summary ============================================================================================================================================================================================================================================== Install 1 Package(s) Total download size: 494 k Installed size: 795 k Is this ok [y/N]: y Downloading Packages: screen-4.0.3-19.el6.x86_64.rpm | 494 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Warning: RPMDB altered outside of yum. Installing : screen-4.0.3-19.el6.x86_64 1/1 Verifying : screen-4.0.3-19.el6.x86_64 1/1 Installed: screen.x86_64 0:4.0.3-19.el6 Complete! [root@v1ex1dbadm01 ~]#
To manually install:
[root@v1ex1dbadm01 patches]# rpm -i screen-4.0.3-19.el6.x86_64.rpm [root@v1ex1dbadm01 patches]# rpm -qa | grep screen screen-4.0.3-19.el6.x86_64 [root@v1ex1dbadm01 patches]# which screen /usr/bin/screen [root@v1ex1dbadm01 patches]#
RPMs are available via Oracle Public-yum:
http://public-yum.oracle.com/oracle-linux-5.html
http://public-yum.oracle.com/oracle-linux-6.html
http://public-yum.oracle.com/oracle-linux-7.html
Examples:
Oracle Linux 5, Update 11:
Oracle Linux 6, Update 8:
Starting Linux Screen
To start Linux Screen:
[root@v1ex1dbadm01 ~]# screen
Linux Screen Commands
Linux Screen commands are used by first pressing “CTRL” then “a“, followed by command key:
Example: “CTRL” then “a” then “?” get you the following help screen:
Screen key bindings, page 1 of 1. Command key: ^A Literal ^A: a break ^B b displays * help ? lockscreen ^X x number N quit \ screen ^C c title A writebuf > clear C dumptermcap . history { } log H only Q readbuf < select ' vbell ^G xoff ^S s colon : fit F info i login L other ^A redisplay ^L l silence _ version v xon ^Q q copy ^[ [ flow ^F f kill K k meta a pow_break B remove X split S width W detach ^D d focus ^I lastmsg ^M m monitor M pow_detach D removebuf = suspend ^Z z windows ^W w digraph ^V hardcopy h license , next ^@ ^N sp n prev ^H ^P p ^? reset Z time ^T t wrap ^R r ^] paste . " windowlist -b - select - 0 select 0 1 select 1 2 select 2 3 select 3 4 select 4 5 select 5 6 select 6 7 select 7 8 select 8 9 select 9 I login on O login off ] paste . [Press Space or Return to end.]
Detaching from Linux Screen
To detach from Linux Screen:
“CTRL” then “a” then “d”
[root@v1ex1dbadm01 ~]# echo "Detaching from Linux Screen, leaving my mark :)"
Detaching from Linux Screen, leaving my mark :)
[detached]
You are at this point returned to your normal shell.
Please Note: network break, accidental close of terminal, the machine running the terminal crashes, etc, automatically detach after detection 🙂
Reattaching to Linux Screen
To reattach to Linux Screen:
[root@v1ex1dbadm01 ~]# screen -r
You’ll now be reattached to you last session:
[root@v1ex1dbadm01 ~]# echo "Detaching from Linux Screen, leaving my mark :)" Detaching from Linux Screen, leaving my mark :) [root@v1ex1dbadm01 ~]#
To reattach to Linux Screen, when multiple sessions are detached, use screen -r :
[root@v1ex1dbadm01 ~]# screen -r There are several suitable screens on: 15090.pts-0.v1ex1dbadm01 (Detached) 346219.pts-0.v1ex1dbadm01 (Detached) Type "screen [-d] -r [pid.]tty.host" to resume one of them. [root@v1ex1dbadm01 ~]# screen -r 346219.pts-0.v1ex1dbadm01
If you get the error message “There is no screen to be resumed.“, this is because the disconnect hasn’t been detected yet. To reconnect add the “-d” switch:
[root@v1ex1dbadm01 ~]# screen -r There is a screen on: 374671.pts-0.v1ex1dbadm01 (Attached) There is no screen to be resumed. [root@v1ex1dbadm01 ~]# screen -r -d 374671.pts-0.v1ex1dbadm01
Terminating Linux Screen
Once you’re finished, just type ‘exit‘ and you’ll exit back to your normal shell:
[screen is terminating] [root@v1ex1dbadm01 ~]# screen -r There is no screen to be resumed. [root@v1ex1dbadm01 ~]#
You can also use:
“CTRL” then “a” then “k“:
Really kill this window [y/n]y [screen is terminating]
Advance Uses
Creating multiple screen in one session
You can add screen to your current session by:
“CTRL” then “a” then “c”
You’ll notice your putty session will say something like:
[screen 1:bash]root@v1ex1dbadm01:~
Screen ID starts with 0 and increases by 1 for every new screen created.
Switching between multiple screens in one session
You can switch between multiple screens, by going next and previous:
Next: “CTRL” then “a” then “n”
Previous: “CTRL” then “a” then “p”
You’ll notice the screen ID change as well as the screen.
Closing is the same as terminating Linux Screen, either type ‘exit‘ or “CTRL” then “a” then “k“.  You’ll need to do this for every screen until all are closed and then you will get:
[screen is terminating]
Known Issues
Cannot open your terminal
If you get the following error message:
[oracle@v1ex1dbadm01 ~]$ screen Cannot open your terminal '/dev/pts/0' - please check.
Simple run Linux Screen as the user ‘root’ and then su to the desired user:
[root@v1ex1dbadm01 ~]# screen [root@v1ex1dbadm01 ~]# su - oracle [oracle@v1ex1dbadm01 ~]$
Scrollbar doesn’t work
You can enter copy mode (not sure why it’s call that, but it lets you navigate):
“CTRL” then “a” then “esc” then “up“/”down”
Or even better add the follow line to the root ~/.screenrc file:
termcapinfo xterm ti@:te@
If the file doesn’t exist, create it and add the line.
Now you can use scrollbar as normal 🙂
There are many more features, which I haven’t yet explored, but now you’ve got the idea, you’ll be able to use ‘Linux Screen’ to your benefit 🙂
Updates
6th September 2017: Added the Oracle Public-yum for Oracle Linux 7.
12th October 2017: Added the -d option to the “Reattaching to Linux Screen” section.
If you found this blog post useful, please like as well as follow me through my various Social Media avenues available on the sidebar and/or subscribe to this oracle blog via WordPress/e-mail.
Thanks
Zed DBA (Zahid Anwar)
Interesting post mate. I tunnel VNC through ssh to guard against disconnect but I will have a look at this since it saves having to configure VNC.
LikeLiked by 1 person
Pretty nifty tool, give it a try 🙂
LikeLike
Just for the record, screen existed well before Linux did.
LikeLike
It did indeed 🙂
LikeLike