简体   繁体   中英

How to exit the interactive mode for yarn top command from within the bash script

I have a bash script which is on serverA. This script will ssh to serverB and runs yarn top command, pulls the metrics and put into the file(test.txt) on serverA. Below is the command which I am using:

ssh -oStrictHostKeyChecking=no -i <key> username@hostname "yarn top" | head -5 | grep -w 'Applications' | awk '{print "Pending_apps" "\t" $7}' >> test.txt

So here the problem is that after my script runs above command it goes into interactive mode and it only exits when I give Ctrl+C or quit signal/command manually.

Is there any way through which after running the above command and redirecting the output to test.txt the script should move to the next command. That is after running the above command on the command prompt it should redirect output to a test.txt file and then should return back to command prompt/terminal

You can try to emulate the console by piping the output of echo like this:

(sleep $SLEEP_TIME; echo -e "q\n\n") | yarn top > yarn-top.log

It means: "run yarn top, and in parallel, wait SLEEP_TIME and then output q and two new lines".

As far as SLEEP_TIME is less than the default refresh delay on yarn top (3 seconds by default), you will get one screen update in yarn-top.log . If you set SLEEP_TIME greater than the refresh delay, you will get as many updates as it has time to run during the SLEEP_TIME .

You need echo -e to escape the newline chars. You need them because yarn top is implemented in java. See yarn top --help :

  1. Since the tool is implemented in Java, you must hit Enter for key presses to be processed.

Classic top can be run in non-interactive mode by top -n 1 Unfortunately I can't find documentation for yarn top

or you can try run command in background ( & ), save its pid, wait for data and kill it

ssh -oStrictHostKeyChecking=no -i <key> username@hostname "yarn top" | head -5 | grep -w 'Applications' | awk '{print "Pending_apps" "\t" $7}' >> test.txt & PID=$!; sleep 1; kill -s SIGINT $PID

hopefully ssh transfer SIGINT successfuly

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM