Jump to content

Recommended Posts

Posted (edited)

Не пойму в чем загвоздка...

Был скрипт на баш по типу :

 

#!/bin/bash/

 

wget куда надо http://domain.com/ips.txt

FOR каждая строчка файла $ip do

ipset add ....... $ip

done

 

из-за проблемной работы решил все переписать на perl (давно собирался, а тут еще и это....)

 

Проблема такова - при запуске вручную данные нового файла подхватываются (ipset -L | grep что нужно)

А вот при запуске по крону - нет. Причем в папке лежит новый файл (соответственно скрипт запускается нормально)

 

На perl - такое же поведение

Идей уже нет...

Edited by mrsaygo
Posted

Почему-то кажется, что файл разбивается не на строки, а на отдельные слова. У меня сделано как-то так:

 

LIST=`cat file.txt | awk -F, '{print $1 $3}' | sed 's/[^[:alnum:]^+ .-]//g' | sed 's/^[ \t\n]*//'`
IFS=$'\n'

for item in $LIST 

do 

echo $item

done

Posted

Почему-то кажется, что файл разбивается не на строки, а на отдельные слова. У меня сделано как-то так:

 

LIST=`cat file.txt | awk -F, '{print $1 $3}' | sed 's/[^[:alnum:]^+ .-]//g' | sed 's/^[ \t\n]*//'`
IFS=$'\n'

for item in $LIST 

do 

echo $item

done

 

 

Как тогда объяснить нормальную работу при запуске вручную?

 

#!/usr/bin/perl -w
#use strict;
use Term::ANSIColor;
$basedir='/home/base/gw_perl';
$points=20;
@files=(['SB','192','eth2'],['PB','10','eth0'],['CH','172','eth4']);
#Поочередное открытие файлов
system "clear";

foreach $file (@files){ 
print colored ['bold green'], "@$file[0]\n";

if(!system("wget  -O $basedir/files/@$file[0]  http://domain.com/files/@$file[0]")){
		print "OK\n";
	open FILENAME, $basedir.'/files/'.@$file[0];
	}


	while (defined (my $line = <FILENAME>)) {

		$i+=1;
		($date_all,$ip) = split(/\*/,$line);
		$date_exp = join('',split('-',$date_all));	
		chomp($ip);
		$date_current = `date +%Y%m%d`;

		# ALLOW DATE SECTION
		if(  $date_exp >= $date_current){
			# ALLOW NAT IP
			if ($ip =~ m/^@$file[1]/){
				system "ipset del test_hash_deny $ip > /dev/null  2>&1";	
				system "ipset add test_hash $ip > /dev/null  2>&1";	

			}
			#ALLOW REAL IP
			else{
				system "ipset del test_hash_deny $ip > /dev/null  2>&1";	
				system "ipset add test_hash $ip > /dev/null  2>&1";	

			}
		}
		# DENY DATE SECTION
		else{
			# DENY NAT IP
			if ($ip =~ m/^@$file[1]/){
				system "ipset del test_hash $ip > /dev/null  2>&1";	
				system "ipset add test_hash_deny $ip > /dev/null  2>&1";	

			}
			# DENY REAL IP
			else{
				system "ipset del test_hash $ip > /dev/null  2>&1";	
				system "ipset add test__hash_deny $ip > /dev/null  2>&1";	



			}


		}

	if (!($i%$points)){print ".";}

	}#END WHILE
close FILENAME;
print colored ['bold blue'] , "\n\nNAT :[$nat_allow - $nat_deny]\n", colored ['bold red'],"REAL:[$real_allow - $real_deny]\n\n";
}
exit 0;

 

 

 

Вот собственно виновник торжества со всякими выводами для удобства.

Posted

Это я понимаю.. вот только как исправить не пойму. У меня же вроде все с абсолютными путями...

 

Не все, исполняемые файлы - wget и ipset - без путей.

Posted

use Term::ANSIColor; попробуйте убрать модуль из скрипта и те команды которые его использут.

 

и перенаправьте в файл все системные команды с результатом.

попробуйте заменить

system "ipset del test_hash $ip > /dev/null 2>&1";

 

на

$command = "ipset del test_hash $ip";

$result = `$command`;

open (OF,"/tmp/file");

printf OF "$command : $result";

close OF;

 

в /tmp/file все ок?

 

Это я понимаю.. вот только как исправить не пойму. У меня же вроде все с абсолютными путями...

 

Не все, исполняемые файлы - wget и ipset - без путей.

вот вот

Posted

use Term::ANSIColor; попробуйте убрать модуль из скрипта и те команды которые его использут.

 

и перенаправьте в файл все системные команды с результатом.

попробуйте заменить

system "ipset del test_hash $ip > /dev/null 2>&1";

 

на

$command = "ipset del test_hash $ip";

$result = `$command`;

open (OF,"/tmp/file");

printf OF "$command : $result";

close OF;

 

в /tmp/file все ок?

 

Это я понимаю.. вот только как исправить не пойму. У меня же вроде все с абсолютными путями...

 

Не все, исполняемые файлы - wget и ipset - без путей.

вот вот

 

Выручили! )))) Самое оно.. теперь осталось осознать почему так))) Обычно так и делаю типа ipset=/usr/sbin/ipset но делал скорее от того, что так положено....

Posted

Из крона доступны только /bin, /sbin...

 

Разве уже запрещено делать как нить так?

 

PATH=/bin:/sbin:/some/path1:/some/path2

 

 

ТС, введите в ком. строке:

 

man 5 crontab

 

и почитайте, что там написано.

Posted

Разве уже запрещено делать как нить так?

 

PATH=/bin:/sbin:/some/path1:/some/path2

 

 

Очевидно, что говорилось о переменной PATH в кроне, выставленной по умолчанию в популярных дистрибутивах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.