X-Git-Url: https://iankelling.org/git/?p=distro-setup;a=blobdiff_plain;f=brc2;h=cdac34b690b40401c314c0138a543e7918674d09;hp=3f0e9ec06504d50d2f43289e9ebf2a423196a0be;hb=77917a8fbf2032a8b2634a1b3de0879ec45cf213;hpb=6061d88c7d5beda3e974943eb8676f7c39d4ae9f diff --git a/brc2 b/brc2 index 3f0e9ec..cdac34b 100644 --- a/brc2 +++ b/brc2 @@ -108,23 +108,30 @@ EOF } bbk() { # btrbk wrapper + + local pid c / local active=true systemctl is-active btrbk.timer || active=false if $active; then - ser disable btrbk.timer + ser stop btrbk.timer fi - if systemctl is-active btrbk.service; then - $active && ser enable btrbk.timer + if [[ $(systemctl is-active btrbk.service ||:) != inactive ]]; then echo "cron btrbk is already running" + if $active; then ser start btrbk.timer; fi return 1 fi # run latest install-my-scripts - btrbk-run "$@" |& pee cat "systemd-cat -t btrbk-run" + jrun -p btrbk btrbk-run "$@" if $active; then - ser enable btrbk.timer + if (( $ret )); then + echo bbk: WARNING: btrbk.timer not restarted due to failure + else + ser start btrbk.timer + fi fi + return $ret } bfg() { java -jar /a/opt/bfg-1.12.14.jar "$@"; } @@ -133,25 +140,68 @@ bigclock() { xclock -digital -update 1 -face 'arial black-80:bold' } -bpull() { - [[ $1 ]] || return 1 - c / - # run latest - install-my-scripts - switch-mail-host pull $1 |& pee cat "systemd-cat -t switch-mail-host" +inttrap() { + pid=$1 + # just passing on -INT doesnt work. + kill -TERM $pid + sleep .05 + if [[ ! -e /proc/$pid ]]; then + if [[ $old_int_trap ]]; then + $old_int_trap + else + trap INT + fi + fi } -bpush() { - [[ $1 ]] || return 1 + + +jrun() { # journal run. run args, log to journal, tail and grep the journal. + # Note, an alternative without systemd would be something like ts. + # Note: I tried doing cmd | pee "sudo systemd-cat" cat, but that + # had some problems like ctrl-c didnt work or something. + local pid pattern sedscript cmd_name ended + ret=0 + case $1 in + -p) + pattern="$2|" + shift 2 + ;; + esac + cmd_name=${1##*/} + sedscript="/$pattern$cmd_name/p;/^.{16}[^ ]+ $cmd_name\[[0-9]+]: ([^ ]*\/)?$cmd_name: exiting with status [0-9]+\$/q" + # We use >() so that $! is the pid of journalctl, otherwise its the sed pid and then + # if we kill that, it takes journalctl about 10 seconds to catch up, and we get + # an annoying message about job finishing then. + journalctl -qn2 -f &> >(sed -nr "$sedscript") & + # We kill this in prompt-command for the case that we ctrl-c the + # systemd-cat. i dont know any way to trap ctrl-c and still run the + # normal action for it. There might be a way, unsure. + jr_pid=$! + systemd-cat -t "$cmd_name" "$@" || ret=$? + if (( $ret )); then + echo "jrun: ERROR: $* returned $ret" + fi + # This justs lets the journal output its last line + # before the prompt comes up. + sleep .5 + kill $jr_pid &>/dev/null ||: + unset jr_pid + fg &>/dev/null ||: +} + +sm() { c / # run latest install-my-scripts - switch-mail-host push $1 |& pee cat "systemd-cat -t switch-mail-host" + jrun -p btrbk switch-mail-host "$@" + return $ret } + lipush() { # note, i had --delete-excluded, but that deletes all files in --exclude-from on # the remote site, which doesn't make sense, so not sure why i had it. local p a - p=(/a/bin /a/exe /a/h /a/c /p/c/machine_specific/linode{,.hosts} /a/opt/{emacs,emacs-debianstable,mu}) + p=(/a/bin /a/exe /a/h /a/c /p/c/machine_specific/linode{,.hosts} /a/opt/{emacs-debianstable,mu}) a="-ahviSAXPH --specials --devices --delete --relative --exclude-from=/p/c/li-rsync-excludes" ret=0 m rsync "$@" $a ${p[@]} /p/c/machine_specific/l2 root@l2.b8.nz:/ || ret=$? @@ -283,7 +333,7 @@ dup() { ran_d=true ;;& *DISTRO-END!*|*DISTRO!*) - pushd + pushd / /b/ds/distro-end || return $? popd ran_d=true @@ -306,6 +356,8 @@ envload() { # load environment from a previous: export > file done < "$file" } +failfunc() { asdf a b c; } +failfunc2() { failfunc d e f; } # one that comes with distros is too old for newer devices fastboot() { @@ -755,18 +807,29 @@ resolvcat() { m s nscd -i hosts f=/etc/resolv.conf echo $f:; ccat $f - hr; m ser status dnsmasq | cat hr; s ss -lpn 'sport = 53' - #hr; echo dnsmasq is $(systemctl is-active dnsmasq) - f=/var/run/dnsmasq/resolv.conf - hr; echo $f:; ccat $f - hr; m grr '^ *servers-file *=' /etc/dnsmasq.conf /etc/dnsmasq.d - f=/etc/dnsmasq-servers.conf - hr; echo $f:; ccat $f + if systemctl is-enabled dnsmasq &>/dev/null || [[ $(systemctl is-active dnsmasq ||:) != inactive ]]; then + # this will fail is dnsmasq is failed + hr; m ser status dnsmasq | cat || : + f=/var/run/dnsmasq/resolv.conf + hr; echo $f:; ccat $f + hr; m grr '^ *(servers-file|server) *=|^ *no-resolv *$' /etc/dnsmasq.conf /etc/dnsmasq.d + f=/etc/dnsmasq-servers.conf + hr; echo $f:; ccat $f + fi + if systemctl is-enabled systemd-resolved &>/dev/null || [[ $(systemctl is-active systemd-resolved ||:) != inactive ]]; then + hr; m ser status systemd-resolved | cat || : + hr; m systemd-resolve --status + fi + } rcat() { resolvcat | less } +reresolv() { + sudo nscd -i hosts + #sudo systemctl restart dnsmasq +} # only run on MAIL_HOST. simpler to keep this on one system. r2eadd() { # usage: name url @@ -993,7 +1056,7 @@ sss() { # ssh solo } # kill off old shared socket then ssh ssk() { - m ssh -O exit "$@" + m ssh -O exit "$@" || [[ $? == 255 ]] m sl "$@" } # plain limited ssh @@ -1167,6 +1230,8 @@ wtr() { curl wttr.in/boston; } xevkb() { xev -event keyboard; } +ziva() { e "toot! i love dancing. fart"; } + # * misc stuff # from curl cheat.sh/:bash_completion