问题
I have a bunch of servers, on which I run experiments using screen. The procedure is the following :
sshto server XXX- launch
screen - start experiments in a few tabs
- detach
screen - disconnect from the server
While the experiments are running, I can easily find on which servers they are by sshing to all servers and listing my running processes (using top or ps).
However, once the experiments are finished, how could I find on which servers I have a screen session opened (so that I can have a look at the output, relaunch them, etc.) ?
PS: my experiments do print their output to files, too... but this is not the point of my question.
回答1:
To list all of the screen sessions for a user, run the following command as that user:
screen -ls
To see all screen sessions on a specific machine you can do:
ls -laR /var/run/screen/
I get this on my machine:
gentle ~ # ls -laR /var/run/screen/
/var/run/screen/:
total 1
drwxrwxr-x 4 root utmp 96 Mar 1 2005 .
drwxr-xr-x 10 root root 840 Feb 1 03:10 ..
drwx------ 2 josh users 88 Jan 13 11:33 S-josh
drwx------ 2 root root 48 Feb 11 10:50 S-root
/var/run/screen/S-josh:
total 0
drwx------ 2 josh users 88 Jan 13 11:33 .
drwxrwxr-x 4 root utmp 96 Mar 1 2005 ..
prwx------ 1 josh users 0 Feb 11 10:41 12931.pts-0.gentle
/var/run/screen/S-root:
total 0
drwx------ 2 root root 48 Feb 11 10:50 .
drwxrwxr-x 4 root utmp 96 Mar 1 2005 ..
This is a rather brilliantly Unixy use of Unix Sockets wrapped in filesystem permissions to handle security, state, and streams.
回答2:
The command screen -list may be what you want.
See the man
回答3:
While joshperry's answer is correct, I find very annoying that it does not tell you the screen name (the one you set with -t option), that is actually what you use to identify a session. (not his fault, of course, that's a screen's flaw)
That's why I instead use a script such as this: ps auxw|grep -i screen|grep -v grep
回答4:
I'm not really sure of your question, but if all you really want is list currently opened screen session, try:
screen -ls
回答5:
For windows system
Open putty
then login in server
If you want to see screen in Console then you have to write command
Screen -ls
if you have to access the screen then you have to use below command
screen -x screen id
Write PWD in command line to check at which folder you are currently
回答6:
In most cases a screen -RRx $username/ will suffice :)
If you still want to list all screens then put the following script in your path and call it screen or whatever you like:
#!/bin/bash
if [[ "$1" != "-ls-all" ]]; then
exec /usr/bin/screen "$@"
else
shopt -s nullglob
screens=(/var/run/screen/S-*/*)
if (( ${#screens[@]} == 0 )); then
echo "no screen session found in /var/run/screen"
else
echo "${screens[@]#*S-}"
fi
fi
It will behave exactly like screen except for showing all screen sessions, when giving the option -ls-all as first parameter.
回答7:
Multiple folks have already pointed that
$ screen -ls
would list the screen sessions.
Here is another trick that may be useful to you.
If you add the following command as a last line in your .bashrc file on server xxx, then it will automatically reconnect to your screen session on login.
screen -d -r
Hope you find it useful.
回答8:
ps x | grep SCREEN
to see what is that screen running in case you used the command
screen -A -m -d php make_something.php
回答9:
So you're using screen to keep the experiments running in the background, or what? If so, why not just start it in the background?
./experiment &
And if you're asking how to get notification the job i done, how about stringing the experiment together with a mail command?
./experiment && echo "the deed is done" | mail youruser@yourlocalworkstation -s "job on server $HOSTNAME is done"
来源:https://stackoverflow.com/questions/537942/how-to-list-running-screen-sessions