I can't seem to figure out a decent way to manage jobs over ssh. I want to start a job in an ssh session, logout, log back in, do a fg, check on the job, logout, then repeat the whole process. nohup doesn't seem to wrok well.
I used this command
$ nohup script & > nohup.out
[1] 28128
$ nohup: ignoring input and appending output to `nohup.out'
[1]+ Exit 255 nohup script
If I do either
$ jobs
$ ps -ef | grep script
I get nothing, i.e. the process isn't found.
Also, a related question I have is: If I'm in an ssh session, and want to send a job to the background, ctrl-z doesn't work. What to do?
Cany anyone help me out?
well - one of the options is to use screen.
more examples here.
another - probably worse if it's one time job - option is to demonize your shell script, add proper logging and use start-stop-daemon to run it in the background until it finishes. status - can be checked in logs produced.
I use screen as well for that..typically I login and run
Then when I reconnect I just run
I also usually put my username in the screen session name if I'm running as root on one of our servers so other folks can see it and connect to it if need be.
You can use the program
screen
. I use it to manage several interactive shell programs.Usage:
A few
screen
tips over at the Arch Linux Wiki, the officialscreen
web site, and some tips and tricks for your screenrc (with screenshots).If you'd like to use screen in an unattended manner, use :
That would put your script in the background, detached! Now you can easily log out and continue what you were doing.
If you don't want to use screen, the only other option would be to send all output to a logfile, and run tail on the logfile to view progress. This assumes the job isn't interactive, which should probably be the case for any long running job anyway. If you need to stop the job prematurely, you can use ps to find the pid and just kill it.
Looking at your command above, you should just be able to check on the contents of nohup.out. Nohup isn't necessary however, you can start the job, run ^Z, then type 'disown' (in bash anyway - this will remove the job from the jobs list, but there is no way around this).
You can combine screen and ssh into one with with this command:
Press Control-A Control-D to disconnect.