Skip to main content
deleted 12 characters in body
Source Link
Kusalananda
  • 355.8k
  • 42
  • 735
  • 1.1k

To remedy this, don't force grep to output the linesmake sure that matches the patternscript does not generate output. You You can do this with the exec >/dev/null 2>&1. Also, we should be using grep with its -q option since we're not at all interested in seeing the output from it (this would generally also speed up the grep as it does not need to parse the whole file, but in this case it make very little difference in speed since the file is so small).

#!/bin/sh

# redirect all output not redirected elsewhere to /dev/null by default:
exec >/dev/null 2>&1

while true; do
    date >sdown.txt

    ping -c 1 -W 1 myserver.net >pingop.txt 2>&1

    if ! grep -q "64 bytes" pingop.txt 2>/dev/null;txt; then
        mutt -s "Server Down!" [email protected] <sdown.txt
        break
    fi

    sleep 10
done
#!/bin/sh

exec >/dev/null 2>&1

while true; do
    if ! ping -q -c 1 -W 1 myserver.net >/dev/null 2>&1;net; then
        date | mutt -s "Server Down!" [email protected]
        break
    fi

    sleep 10
done
#!/bin/sh

exec >/dev/null 2>&1

while ping -q -c 1 -W 1 myserver.net >/dev/null 2>&1;net; do
    sleep 10
done

date | mutt -s "Server Down!" [email protected]
* * * * * ping -q -c 1 -W 1 >/dev/null 2>&1 || ( date | mail -s "Server down" [email protected] )

To remedy this, don't force grep to output the lines that matches the pattern. You do this with the -q option.

#!/bin/sh

while true; do
    date >sdown.txt

    ping -c 1 -W 1 myserver.net >pingop.txt 2>&1

    if ! grep -q "64 bytes" pingop.txt 2>/dev/null; then
        mutt -s "Server Down!" [email protected] <sdown.txt
        break
    fi

    sleep 10
done
#!/bin/sh

while true; do
    if ! ping -c 1 -W 1 myserver.net >/dev/null 2>&1; then
        date | mutt -s "Server Down!" [email protected]
        break
    fi

    sleep 10
done
#!/bin/sh

while ping -c 1 -W 1 myserver.net >/dev/null 2>&1; do
    sleep 10
done

date | mutt -s "Server Down!" [email protected]
* * * * * ping -c 1 -W 1 >/dev/null 2>&1 || ( date | mail -s "Server down" [email protected] )

To remedy this, make sure that the script does not generate output. You can do this with exec >/dev/null 2>&1. Also, we should be using grep with its -q option since we're not at all interested in seeing the output from it (this would generally also speed up the grep as it does not need to parse the whole file, but in this case it make very little difference in speed since the file is so small).

#!/bin/sh

# redirect all output not redirected elsewhere to /dev/null by default:
exec >/dev/null 2>&1

while true; do
    date >sdown.txt

    ping -c 1 -W 1 myserver.net >pingop.txt

    if ! grep -q "64 bytes" pingop.txt; then
        mutt -s "Server Down!" [email protected] <sdown.txt
        break
    fi

    sleep 10
done
#!/bin/sh

exec >/dev/null 2>&1

while true; do
    if ! ping -q -c 1 -W 1 myserver.net; then
        date | mutt -s "Server Down!" [email protected]
        break
    fi

    sleep 10
done
#!/bin/sh

exec >/dev/null 2>&1

while ping -q -c 1 -W 1 myserver.net; do
    sleep 10
done

date | mutt -s "Server Down!" [email protected]
* * * * * ping -q -c 1 -W 1 >/dev/null 2>&1 || ( date | mail -s "Server down" [email protected] )
deleted 12 characters in body
Source Link
Kusalananda
  • 355.8k
  • 42
  • 735
  • 1.1k
#!/bin/bash

while true; do
    date >sdown.txt

    ping -c 1 -W 1 myserver.net >pingop.txt 2>&1

    if ! grep -q "64 bytes" pingop.txt 2>/dev/null; then
        mutt -s "Server Down!" [email protected] <sdown.txt
        break
    fi

    sleep 10
done
#!/bin/sh

while true; do
    date >sdown.txt

    ping -c 1 -W 1 myserver.net >pingop.txt 2>&1

    if ! grep -q "64 bytes" pingop.txt 2>/dev/null; then
        mutt -s "Server Down!" [email protected] <sdown.txt
        break
    fi

    sleep 10
done
#!/bin/bash

while true; do
    if ! ping -c 1 -W 1 myserver.net >/dev/null 2>&1; then
        date | mutt -s "Server Down!" [email protected]
        break
    fi

    sleep 10
done
#!/bin/sh

while true; do
    if ! ping -c 1 -W 1 myserver.net >/dev/null 2>&1; then
        date | mutt -s "Server Down!" [email protected]
        break
    fi

    sleep 10
done
#!/bin/bash

while ping -c 1 -W 1 myserver.net >/dev/null 2>&1; do
    sleep 10
done

date | mutt -s "Server Down!" [email protected]
#!/bin/sh

while ping -c 1 -W 1 myserver.net >/dev/null 2>&1; do
    sleep 10
done

date | mutt -s "Server Down!" [email protected]
#!/bin/bash

while true; do
    date >sdown.txt

    ping -c 1 -W 1 myserver.net >pingop.txt 2>&1

    if ! grep -q "64 bytes" pingop.txt 2>/dev/null; then
        mutt -s "Server Down!" [email protected] <sdown.txt
        break
    fi

    sleep 10
done
#!/bin/bash

while true; do
    if ! ping -c 1 -W 1 myserver.net >/dev/null 2>&1; then
        date | mutt -s "Server Down!" [email protected]
        break
    fi

    sleep 10
done
#!/bin/bash

while ping -c 1 -W 1 myserver.net >/dev/null 2>&1; do
    sleep 10
done

date | mutt -s "Server Down!" [email protected]
#!/bin/sh

while true; do
    date >sdown.txt

    ping -c 1 -W 1 myserver.net >pingop.txt 2>&1

    if ! grep -q "64 bytes" pingop.txt 2>/dev/null; then
        mutt -s "Server Down!" [email protected] <sdown.txt
        break
    fi

    sleep 10
done
#!/bin/sh

while true; do
    if ! ping -c 1 -W 1 myserver.net >/dev/null 2>&1; then
        date | mutt -s "Server Down!" [email protected]
        break
    fi

    sleep 10
done
#!/bin/sh

while ping -c 1 -W 1 myserver.net >/dev/null 2>&1; do
    sleep 10
done

date | mutt -s "Server Down!" [email protected]
added 157 characters in body
Source Link
Kusalananda
  • 355.8k
  • 42
  • 735
  • 1.1k

To illustrate this (this is not exactly what's happening in your case, but it shows what happens if GNU grep is unable to write its output):

#!/bin/bash

while true; do
    date >sdown.txt

    ping -c 1 -W 1 myserver.net >pingop.txt 2>&1

    if ! grep -q "64 bytes" pingop.txt;txt 2>/dev/null; then
        mutt -s "Server Down!" [email protected] <sdown.txt
        break
    fi

    sleep 10
done
#!/bin/bash

while true; do
    if ! ping -c 1 -W 1 myserver.net >/dev/null;null 2>&1; then
        date | mutt -s "Server Down!" [email protected]
        break
    fi

    sleep 10
done
#!/bin/bash

while ping -c 1 -W 1 myserver.net >/dev/null;null 2>&1; do
    sleep 10
done

date | mutt -s "Server Down!" [email protected]
* * * * * ping -c 1 -W 1 >/dev/null 2>&1 || ( date | mail -s "Server down" [email protected] )

To illustrate this:

#!/bin/bash

while true; do
    date >sdown.txt

    ping -c 1 -W 1 myserver.net >pingop.txt

    if ! grep -q "64 bytes" pingop.txt; then
        mutt -s "Server Down!" [email protected] <sdown.txt
        break
    fi

    sleep 10
done
#!/bin/bash

while true; do
    if ! ping -c 1 -W 1 myserver.net >/dev/null; then
        date | mutt -s "Server Down!" [email protected]
        break
    fi

    sleep 10
done
#!/bin/bash

while ping -c 1 -W 1 myserver.net >/dev/null; do
    sleep 10
done

date | mutt -s "Server Down!" [email protected]
* * * * * ping -c 1 -W 1 >/dev/null || ( date | mail -s "Server down" [email protected] )

To illustrate this (this is not exactly what's happening in your case, but it shows what happens if GNU grep is unable to write its output):

#!/bin/bash

while true; do
    date >sdown.txt

    ping -c 1 -W 1 myserver.net >pingop.txt 2>&1

    if ! grep -q "64 bytes" pingop.txt 2>/dev/null; then
        mutt -s "Server Down!" [email protected] <sdown.txt
        break
    fi

    sleep 10
done
#!/bin/bash

while true; do
    if ! ping -c 1 -W 1 myserver.net >/dev/null 2>&1; then
        date | mutt -s "Server Down!" [email protected]
        break
    fi

    sleep 10
done
#!/bin/bash

while ping -c 1 -W 1 myserver.net >/dev/null 2>&1; do
    sleep 10
done

date | mutt -s "Server Down!" [email protected]
* * * * * ping -c 1 -W 1 >/dev/null 2>&1 || ( date | mail -s "Server down" [email protected] )
added 32 characters in body
Source Link
Kusalananda
  • 355.8k
  • 42
  • 735
  • 1.1k
Loading
added 216 characters in body
Source Link
Kusalananda
  • 355.8k
  • 42
  • 735
  • 1.1k
Loading
added 25 characters in body
Source Link
Kusalananda
  • 355.8k
  • 42
  • 735
  • 1.1k
Loading
added 240 characters in body
Source Link
Kusalananda
  • 355.8k
  • 42
  • 735
  • 1.1k
Loading
added 53 characters in body
Source Link
Kusalananda
  • 355.8k
  • 42
  • 735
  • 1.1k
Loading
Source Link
Kusalananda
  • 355.8k
  • 42
  • 735
  • 1.1k
Loading