X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=brc2;h=cdac34b690b40401c314c0138a543e7918674d09;hb=77917a8fbf2032a8b2634a1b3de0879ec45cf213;hp=50d51baab5ff3b3b03c98932a5bc0068a4c8235a;hpb=a1ebefe19ab910d20fad0c2fd88637fee23dee7c;p=distro-setup diff --git a/brc2 b/brc2 index 50d51ba..cdac34b 100644 --- a/brc2 +++ b/brc2 @@ -114,11 +114,11 @@ bbk() { # btrbk wrapper 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 @@ -126,9 +126,9 @@ bbk() { # btrbk wrapper jrun -p btrbk btrbk-run "$@" if $active; then if (( $ret )); then - echo bbk: WARNING: btrbk.timer not reenabled due to failure + echo bbk: WARNING: btrbk.timer not restarted due to failure else - ser enable btrbk.timer + ser start btrbk.timer fi fi return $ret @@ -154,10 +154,12 @@ inttrap() { fi } -_jrun() { # journal run. run args, log to journal, tail and grep the journal. - # Redirect all commands which might have stderr to stdout because of - # wrapping. - local pid pattern jr_pid sedscript cmd_name ended + +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) @@ -166,45 +168,25 @@ _jrun() { # journal run. run args, log to journal, tail and grep the journal. ;; esac cmd_name=${1##*/} - systemd-cat -t "$cmd_name" "$@" 2>&1 & - pid=$! - old_int_trap="$(trap -p INT)" - # Note, just passing along INT wont actually stop it. - # Oddly, the log says ERROR: /script.sh returned 130 - # but it continues on. - trap "inttrap $pid" INT - sedscript="/$pattern$cmd_name/p;/^.{16}[^ ]+ $cmd_name\[$pid]: ([^ ]*\/)?$cmd_name: exiting with status [0-9]+\$/q" - # debug: - #echo "sedscript: sed -nr '$sedscript'" - journalctl -S "4 seconds ago" -f |& sed -nr "$sedscript" 2>&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=$! - wait $pid 2>&1 || ret=$? + systemd-cat -t "$cmd_name" "$@" || ret=$? if (( $ret )); then - echo "$0: ERROR: $* returned $ret" - fi - ended=false - # give it 4 seconds to find the end of the log - for (( i=0; i<80; i++ )); do - if [[ -e /proc/$jr_pid ]]; then - sleep .05 2>&1 - else - ended=true - break - fi - done - if ! $ended; then - kill $jr_pid 2>&1 - fi - if [[ $old_int_trap ]]; then - $old_int_trap - else - trap INT + echo "jrun: ERROR: $* returned $ret" fi - return 0 -} -jrun() { - # ditching stderr avoids the jobs status change output. - _jrun "$@" 2>/dev/null + # 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() { @@ -825,22 +807,28 @@ resolvcat() { m s nscd -i hosts f=/etc/resolv.conf echo $f:; ccat $f - # this will fail is dnsmasq is failed - 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|server) *=|^ *no-resolv *$' /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 + #sudo systemctl restart dnsmasq } # only run on MAIL_HOST. simpler to keep this on one system.