Alex Ivanov
2005-06-24 09:50:40 UTC
Hi All.
Возникла глупейшая проблема - не могу запустить скрипт из crontab
есть такая строчка в crontab:
*/5 * * * * root /root/ipfw/ipfw_traffdump.sh
Т.е запускать скрипт каждые пять минут.
Cron в лог пишет каждые 5ть минут:
Jun 24 13:35:00 omzgate1 /usr/sbin/cron[33823]: (root) CMD
(/root/ipfw/ipfw_traffdump.sh)
Т.е. скрипт запускает.
Из консоли скрипт прекрасно работает, права на нем правильные, все ОК.
Но вот засада, при запуске из консоли скрипт отрабатывает _абсолютно_
корректно (тестировал под рутом из под /bin/sh), а при запуске из cron - не
хочет писать в базу.
Для теста в сам скрипт засунул строку:
date >> /tmp/td.log
Чтоб выводил дату своего запуска в лог, в нем все ок, т.е. скрипт запускается,
но сам почему-то ничего в базу ничего не пишет.
Отсюда вопрос - чем отличается запуск скрипта из cron от запуска из консоли
(ну кроме shell)?
Вот собственно сам скрипт:
[***@gate1.xxx.com]/home/orm> ll /root/ipfw/ipfw_traffdump.sh
-rwx------ 1 root wheel - 2332 Jun 24 13:21 /root/ipfw/ipfw_traffdump.sh
[***@gate1.xxx.com]/home/orm> cat /root/ipfw/ipfw_traffdump.sh
#!/bin/sh
fwcmd="/sbin/ipfw"
. /root/ipfw/ipfw_pipe_numbers.sh
date >> /tmp/td.log
#================ Inbound traffic
if [ -r /var/run/pipe.${in_pipe} ]; then
echo LOCK TABLES ${in_table} WRITE\; \
ALTER TABLE ${in_table} DISABLE KEYS\; | ${mysqlcmd}
${fwcmd} pipe ${in_pipe} show |\
tail -n +4 |\
awk " { print \$3, \$4, \$6 } "|\
awk -F[/\.\t\ ] " { print \$11, \$1, \$2, \$3, \$4, \$6, \$7,
\$8, \$9, \$5 } "|\
# sort -r -n |\
awk " { print ( \" INSERT INTO ${in_table} (
bytes,source_ip_1,source_ip_2,source_ip_3,source_ip_4,destination_ip_1,destinat
ion_ip_2,destination_ip_3,destination_ip_4,source_port ) VALUES ( \", \$1, \"
, \", \
\$2, \" , \",\
\$3, \" , \",\
\$4, \" , \",\
\$5, \" , \",\
\$6, \" , \",\
\$7, \" , \",\
\$8, \" , \",\
\$9, \" , \",\
\$10, \" ); \") } "|\
${mysqlcmd}
${fwcmd} pipe ${in_pipe} delete && rm /var/run/pipe.${in_pipe}
fi
${fwcmd} pipe ${in_pipe} config \
mask src-ip 0xffffffff \
dst-ip 0xffffffff \
src-port 0xffff \
dst-port 0x0000 \
buckets 65536 && echo xxx > /var/run/pipe.${in_pipe}
#=================== Outbound traffic
if [ -r /var/run/pipe.${out_pipe} ]; then
echo LOCK TABLES ${out_table} WRITE\; \
ALTER TABLE ${out_table} DISABLE KEYS\; | ${mysqlcmd}
${fwcmd} pipe ${out_pipe} show |\
tail -n +4 |\
awk " { print \$3, \$4, \$6 } "|\
awk -F[/\.\t\ ] " { print \$11, \$1, \$2, \$3, \$4, \$6, \$7,
\$8, \$9, \$10 } "|\
# sort -r -n |\
awk " { print ( \" INSERT INTO ${out_table} (
bytes,source_ip_1,source_ip_2,source_ip_3,source_ip_4,destination_ip_1,destinat
ion_ip_2,destination_ip_3,destination_ip_4,destination_port ) VALUES ( \",
\$1, \" , \", \
\$2, \" , \",\
\$3, \" , \",\
\$4, \" , \",\
\$5, \" , \",\
\$6, \" , \",\
\$7, \" , \",\
\$8, \" , \",\
\$9, \" , \",\
\$10, \" ); \") } "|\
${mysqlcmd}
${fwcmd} pipe ${out_pipe} delete && rm /var/run/pipe.${out_pipe}
fi
${fwcmd} pipe ${out_pipe} config \
mask src-ip 0xffffffff \
dst-ip 0xffffffff \
src-port 0x0000 \
dst-port 0xffff \
buckets 65536 && echo xxx > /var/run/pipe.${out_pipe}
echo UNLOCK TABLES\; \
ALTER TABLE ${in_table} ENABLE KEYS\; \
ALTER TABLE ${out_table} ENABLE KEYS\; | ${mysqlcmd}
[***@gate1.xxx.com]/home/orm> cat /root/ipfw/ipfw_pipe_numbers.sh
#!/bin/sh
export in_pipe="1"
export in_table="inbound"
export out_pipe="2"
export out_table="outbound"
export mysqlcmd="mysql traff"
#export mysqlcmd="cat"
[***@omzgate1.omzcrane.com]/home/orm> ll /root/ipfw/ipfw_pipe_numbers.sh
-rwx------ 1 root wheel - 156 Jun 16 12:10 /root/ipfw/ipfw_pipe_numbers.sh
Возникла глупейшая проблема - не могу запустить скрипт из crontab
есть такая строчка в crontab:
*/5 * * * * root /root/ipfw/ipfw_traffdump.sh
Т.е запускать скрипт каждые пять минут.
Cron в лог пишет каждые 5ть минут:
Jun 24 13:35:00 omzgate1 /usr/sbin/cron[33823]: (root) CMD
(/root/ipfw/ipfw_traffdump.sh)
Т.е. скрипт запускает.
Из консоли скрипт прекрасно работает, права на нем правильные, все ОК.
Но вот засада, при запуске из консоли скрипт отрабатывает _абсолютно_
корректно (тестировал под рутом из под /bin/sh), а при запуске из cron - не
хочет писать в базу.
Для теста в сам скрипт засунул строку:
date >> /tmp/td.log
Чтоб выводил дату своего запуска в лог, в нем все ок, т.е. скрипт запускается,
но сам почему-то ничего в базу ничего не пишет.
Отсюда вопрос - чем отличается запуск скрипта из cron от запуска из консоли
(ну кроме shell)?
Вот собственно сам скрипт:
[***@gate1.xxx.com]/home/orm> ll /root/ipfw/ipfw_traffdump.sh
-rwx------ 1 root wheel - 2332 Jun 24 13:21 /root/ipfw/ipfw_traffdump.sh
[***@gate1.xxx.com]/home/orm> cat /root/ipfw/ipfw_traffdump.sh
#!/bin/sh
fwcmd="/sbin/ipfw"
. /root/ipfw/ipfw_pipe_numbers.sh
date >> /tmp/td.log
#================ Inbound traffic
if [ -r /var/run/pipe.${in_pipe} ]; then
echo LOCK TABLES ${in_table} WRITE\; \
ALTER TABLE ${in_table} DISABLE KEYS\; | ${mysqlcmd}
${fwcmd} pipe ${in_pipe} show |\
tail -n +4 |\
awk " { print \$3, \$4, \$6 } "|\
awk -F[/\.\t\ ] " { print \$11, \$1, \$2, \$3, \$4, \$6, \$7,
\$8, \$9, \$5 } "|\
# sort -r -n |\
awk " { print ( \" INSERT INTO ${in_table} (
bytes,source_ip_1,source_ip_2,source_ip_3,source_ip_4,destination_ip_1,destinat
ion_ip_2,destination_ip_3,destination_ip_4,source_port ) VALUES ( \", \$1, \"
, \", \
\$2, \" , \",\
\$3, \" , \",\
\$4, \" , \",\
\$5, \" , \",\
\$6, \" , \",\
\$7, \" , \",\
\$8, \" , \",\
\$9, \" , \",\
\$10, \" ); \") } "|\
${mysqlcmd}
${fwcmd} pipe ${in_pipe} delete && rm /var/run/pipe.${in_pipe}
fi
${fwcmd} pipe ${in_pipe} config \
mask src-ip 0xffffffff \
dst-ip 0xffffffff \
src-port 0xffff \
dst-port 0x0000 \
buckets 65536 && echo xxx > /var/run/pipe.${in_pipe}
#=================== Outbound traffic
if [ -r /var/run/pipe.${out_pipe} ]; then
echo LOCK TABLES ${out_table} WRITE\; \
ALTER TABLE ${out_table} DISABLE KEYS\; | ${mysqlcmd}
${fwcmd} pipe ${out_pipe} show |\
tail -n +4 |\
awk " { print \$3, \$4, \$6 } "|\
awk -F[/\.\t\ ] " { print \$11, \$1, \$2, \$3, \$4, \$6, \$7,
\$8, \$9, \$10 } "|\
# sort -r -n |\
awk " { print ( \" INSERT INTO ${out_table} (
bytes,source_ip_1,source_ip_2,source_ip_3,source_ip_4,destination_ip_1,destinat
ion_ip_2,destination_ip_3,destination_ip_4,destination_port ) VALUES ( \",
\$1, \" , \", \
\$2, \" , \",\
\$3, \" , \",\
\$4, \" , \",\
\$5, \" , \",\
\$6, \" , \",\
\$7, \" , \",\
\$8, \" , \",\
\$9, \" , \",\
\$10, \" ); \") } "|\
${mysqlcmd}
${fwcmd} pipe ${out_pipe} delete && rm /var/run/pipe.${out_pipe}
fi
${fwcmd} pipe ${out_pipe} config \
mask src-ip 0xffffffff \
dst-ip 0xffffffff \
src-port 0x0000 \
dst-port 0xffff \
buckets 65536 && echo xxx > /var/run/pipe.${out_pipe}
echo UNLOCK TABLES\; \
ALTER TABLE ${in_table} ENABLE KEYS\; \
ALTER TABLE ${out_table} ENABLE KEYS\; | ${mysqlcmd}
[***@gate1.xxx.com]/home/orm> cat /root/ipfw/ipfw_pipe_numbers.sh
#!/bin/sh
export in_pipe="1"
export in_table="inbound"
export out_pipe="2"
export out_table="outbound"
export mysqlcmd="mysql traff"
#export mysqlcmd="cat"
[***@omzgate1.omzcrane.com]/home/orm> ll /root/ipfw/ipfw_pipe_numbers.sh
-rwx------ 1 root wheel - 156 Jun 16 12:10 /root/ipfw/ipfw_pipe_numbers.sh