0

I want to run the following commands and close the terminal:

mysqldump -udatabase -pdatabase database > db.sql && zip db.sql.zip db.sql && rm db.sql && mv db.sql.zip /var/www/vhosts/*/httpdocs && cd /var/www/vhosts/*/httpdocs && zip -r backup.zip . && cd && touch backup_is_ready

It works fine when the terminal is open, but the ZIP will be about 40GB and I want to be able to close the terminal, or else a disconnect can terminate the process.

So I have commands A && B

I tried:

(A &) && (B &)

(A && B) &

{A && B} &

nohup sh -c "A && B"

nohup { A && B } &

and many other options, but nothing worked.

I just want to put the command string in the terminal, then close the terminal, come back after 1 hour and get it ready.

I also have a longer command chain that starts with

sh <(wget -O - https://autoinstall.plesk.com/one-click-installer) && plesk bin init_conf --init -name "John Doe" -passwd "mypassword" -email "admin@example.com" -send_announce false -trial_license true -license_agreed true && plesk bin subscription --create example.com -owner admin -service-plan "Unlimited" -ip 000.000.000.000 -login username -passwd 'password' && ...

My command chains work great when the terminal is open, I only want to close it after putting the command chain in the terminal, but I don't want to create a file for it.

Is there any syntax that works without need to create a bash file?

  • are you planning to ssh to this host? If so, you can redirect multiple commands to the ssh session. If this is relevant to you, I'll add it to my answer. – Crypteya Feb 28 at 3:08
  • Yes, I am using MobaXterm – GoodGuy Feb 28 at 11:41
  • Rather than me butchering an explanation, check out this answer: stackoverflow.com/a/4412338/3465014, I've also added this info to my answer. – Crypteya Feb 28 at 21:21
0
  1. Ctrl + Z to stop (pause) the program and get back to the shell.
  2. bg to run it in the background.
  3. disown -h [job-spec] where [job-spec] is the job number (like %1 for the first running job; find about your number with the jobs command) so that the job isn't killed when the terminal closes.
0

To startup a program in the background, use:

<your command> &

What I'd recommend is simply running what you'd like as two separate commands. Try:

user@hostname$ A &
user@hostname$ B &

If this process is too arduous or needs to be run frequently, you can enter these commands into a shell script. This script can then be run with

/path/to/my_script.sh &

Update:

Based on additional info in your comments, for an overview of how to ssh to a host, run multiple commands, and then disconnect, see this answer: https://stackoverflow.com/a/4412338/3465014

  • Unfortunally it only affects the currently running command, so when A runs, B doesn't start when terminal is closed. <command1 && command2> & returns syntax error – GoodGuy Feb 28 at 1:38
  • @GoodGuy, you shouldn't close the terminal until you have run both A & and B & manually. I've updated my answer to have some additional info about shell scripts. – Crypteya Feb 28 at 1:42
  • Thank you for the answer. Actually the goal is to close the terminal after execute the commands. Can I also cretae a script and run it, like --- touch script && printf \"A && B && C\" > script && sh script --- ? – GoodGuy Feb 28 at 1:47
  • You can close the terminal by using the exit command at the end of the script. You should be able to run the script fine like that. Make sure that at the end you do something like sh ./script or sh /full/path/to/script. You need to put the path to the script in your final command. Simply doing 'sh script' won't work. – Crypteya Feb 28 at 3:04
  • A major benefit of scripting however is that it doesn't need to be re-created each time so the long one-liner may not be necessary after it has been created. – Crypteya Feb 28 at 3:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.