On a linux system is there any way to use nohup when the process that is being nohuped required input, such as an rsync command that needs a password to be entered but will then run happily on its own?
6 Answers
If the command doesn't have to be scripted, you can do it this way:
- run it in the foreground
- pause it (CTRL+Z)
- disown it so that it won't be closed when you close your shell (disown -h %jobid)
- resume the job in the background (bg %jobid)
- 1,680
You want to look at screen. Screen will create a shell session for you, which you can detach and then reattach at a later date. Try:
# screen rsync -a directory server@directory
You can type in your password, verify that it's running as you expect and then press 'ctrl-a' followed by 'd'. You should now be detached from your screen session. If you want to see how it's getting on, run
# screen -r
and you should be reattached. 'ctrl-a' 'd' will detach you again.
When the command finishes, screen should quit.
- 23,963
The (very late) answer is:
Yes, you can use nohup with a process that requires input:
A: You can either start your process as you would usually:
So you type
nohup ... &like so:nohup rsync -av john@doe.io:/from/here/ ./to/here &Now when you hit enter the process will start but is detached so you are in the situation you encountered and previewed as a problem: How to enter the credentials for user john at doe.io?
Type
jobsin your terminal and you will see something like:[1]+ Stopped nohup rsync -av john@doe.io::/from/here/ ./to/hereThe
[1]+indicates the jobid (here it is just1). Also, the process in now actually halted since thersynccommand is waiting for input, hence theStoppedstate.Type
fg %<jobid>so in the example it would befg %1(don't forget the %, it's part of the syntax!)Now you brought the process to the foreground and can interact with it.
B: Or simply ditch the ampersand, so the process stays in the foreground (and you essentially follow the the accepted answer by @Joril).
So you would type:
nohup rsync -av john@doe.io:/from/here/ ./to/hereAnd you readily can interact with the process.
In both cases, A or B, now you can interact with the process:
In our example the last line of in your terminal would now read something like:
john@doe.io's password:Once you are done interacting hit
Ctrl + Zwhich will halt the processType
jobsand you will see something like:[1]+ Stopped nohup rsync -av john@doe.io::/from/here/ ./to/hereThe only thing now left to do is to make the process running again. To do so simply type:
bg %<jobid>(sobg %1in our example).We are done! Go grab a coffee and and check your
nohup.outfile from time to time to see if the process has finished.
- 121
Some modules on the remote daemon may require authentication. If so, you will receive a password prompt when you connect. You can avoid the password prompt by setting the environment variable RSYNC_PASSWORD to the password you want to use or using the --password-file option. This may be useful when scripting rsync.
found this in the man page
- 21
If possible it might be better for the specific instance of running an rsync command to set up SSH key authentication without a password rather than try to automatically stuff a password into rsync.
- 1,863
Aside from what's been said above, the most general solution might be to wrap the command in a script that takes input from a file and passes it on (perhaps using pipes, or expect, or something like that). The wrapper script itself is then just a normal command that doesn't require input, of course.
- 3,490