Както romeo_ninov каза, FreeBSD не е дистрибуция, а отделна и различна операционна система. Когато в този форум се зададе въпрос в раздел, извън BSD секцията, и не се спомене, че става дума за друга операционна система, по подразбиране се приема, че става дума за Linux. В такива случаи е задължително да споменаваш операционната система, за която става дума, за да не стават обърквания - FreeBSD не е Linux и е различен от него.
За скрипта. Аз го написах за bash. Имаш ли bash? Ако имаш, той в /bin/bash ли е? Ако не е, смени пътя до него в началото на скрипта. Ако нямаш bash, ще си го качиш ли, или да пренаписваме скрипта за твоя shell? Ако ще го пренаписваме, кой е твоят shell, че да не пропуснем нещо?
Да, в *BSD варианта на netstat параметърът "-p" има друга функция (указване на протокол), така че отпада от командата в случая. Трябва обаче да смениш и изписването на порт 80, защото и то е различно:
GeSHi (Bash):
httpdStatus=$(netstat -an | grep '*.80 ')
Провери си и дали твоят cron знае за пътищата до arping, netstat и httpd, и ако не ги знае, ползвай пълни пътища или си ги опиши в PATH променливата.
Надолу if-овете са си екстра, стига правилно да си изписал MAC адреса и командите за пускане и спиране на httpd.
ОК, съгласен съм. Исках друго да кажа, но то какво стана
Знам разликата, а не споменавам, защото смятам, че сам мога да оправя пътя на командите. Имах затруднения в логиката.
Да имам баш и мисля, че се вижда от дебъга или греша?Ето пак за всеки случай:
bash --help
GNU bash, version 3.2.25(0)-release-(i386-portbld-freebsd7.0)Пътя е сменен, но дори и да не е, пробвах скрипта ти без двойните [ и с разни други промени, но без резултат, въпреки, че има логиката да работи.
Порта е сменен което също се вижда от дебъга който съм постнал.
Ще се повторя, но пак ще кажа: Скрипта работи само когато ИП с МАК 00:11:22:33:44:55 е на линия. От което автоматично следва, че всички пътища до въпросните команди са ОК.
Ако сменя ИП-то към което пращам arp или сменя порта на несъществуващ, скрипта не работи. Влиза в 3тия if и не изпълнява командата:
GeSHi (Bash):
bash -x /custom/mac_check_v2.sh
++ arping -c 1 192.168.1.1
++ grep from
++ awk '{print $4}'
+ testPC=00:aa:bb:cc:dd:ee
++ netstat -an
++ grep .80
++ tail -n 1
++ awk '{print $4}'
++ cut -c3-4
+ httpdStatus=80
+ [[ 00:aa:bb:cc:dd:ee == \0\0\:\1\1\:\2\2\:\3\3\:\4\4\:\5\5 ]]
+ [[ 80 == '' ]]
и когато всичко е ОК
GeSHi (Bash):
bash -x /custom/mac_check_v2.sh
++ arping -c 1 192.168.1.1
++ grep from
++ awk '{print $4}'
+ testPC=00:11:22:33:44:55
++ netstat -an
++ grep .80
++ tail -n 1
++ awk '{print $4}'
++ cut -c3-4
+ httpdStatus=80
+ [[ 00:11:22:33:44:55 == \0\0\:\1\1\:\2\2\:\3\3\:\4\4\:\5\5 ]]
+ [[ 80 != '' ]]
+ echo 'Main PC is here, lets stop httpd'
Main PC is here, lets stop httpd
Скрипта:
GeSHi (Bash):
#!/usr/local/bin/bash
testPC=$(arping -c 1 192.168.1.1 | grep from | awk '{print $4}')
httpdStatus=$(netstat -an | grep '.80' | tail -n 1 | awk '{print $4}' |cut -c3-4)
if [[ "$testPC" == "00:11:22:33:44:55" ]]; then
if [[ "$httpdStatus" != "" ]]; then
echo "Main PC is here, lets stop httpd"
fi
else
if [[ "$httpdStatus" == "" ]]; then
echo "Main PC missing, lets start httpd"
fi
fi
Разбира се, може и аз да бъркам покрай всичките тези промени и средата която ползвам (/bin/csh).