OAR uses numeric ids for jobs and retype them every time can be really annoying. In case if you have meaningful names, there is a way to quickly select you job for whatever you need. To use those aliases you need installed FZF: https://github.com/junegunn/fzf. In its wiki (https://github.com/junegunn/fzf/wiki/Examples) there are a lot of exciting examples how to use fzf with shell, vim and git. You need to put snippets below in your .bashrc (or .zshrc) and restart your shell.
jsh() { myhost="$(hostname)" if [ `hostname -s` = 'edgar' -o `hostname -s` = 'access2-cp' ]; then local stats jid stats=$(oarstat --user=$USER --format 2 | tail -n +3 | grep -v '^[0-9]\+\s\+W') && jid=$(echo "$stats" | tac | fzf) && oarsub -C $(echo "$jid" | awk '{print $1}') else echo -e "Run it on edgar\n\n" ssh -t edgar jsh fi }
A few explanations why it works. oarstat
command lists all jobs for a given user, tail
removes the header, grep
removes all waiting jobs (you can't connect to them yet), tac
reverses the order of lines. fzf
is a fuzzy searcher, it outputs the line you chose in stdout. It goes to awk
that cuts the job_id and passes it to oarsub
. So to use it just type jsh
and type some words from the name of job you are looking for or use Ctrl-j/Ctrl-k to go down/up. When you are done, press enter and enjoy your ssh tunnel.
jlog() { if [ `hostname -s` = 'edgar' ]; then local stats jid stats=$(oarstat --user=$USER --format 2 | tail -n +3 | grep -v '^[0-9]\+\s\+W') && jid=$(echo "$stats" | tac | fzf) && jid=$(echo "$jid" | awk '{print $1}') less +GF $HOME/<your_log_dir>/*.$jid.stderr else echo "Run it on edgar\n\n" ssh edgar fi }
The idea is the same essentially, just instead of oarsub
, it calls less
pager. You need to put the path to your log directory and probably change stderr
to stdout
(if you want). less
is automatically jumps to the end of file (+G
option) and turns into continuous reloading mode (F
option).
jkill() { if [ `hostname -s` = 'edgar' ]; then local stats jid stats=$(oarstat --user=$USER --format 2 | tail -n +3) && jid=$(echo "$stats" | tac | fzf -m) && oardel $(echo "$jid" | awk '{print $1}' | tr '\n' ' ') else echo "Run it on edgar\n\n" ssh edgar fi }
Essentially the same except we don't filter out waiting jobs (hence no grep
), fzf
runs in multi-choice mode (-m
flag), you can choose a few jobs using tab and to concatenate job ids into one line we use tr
.