Автор Тема: Запуск скриптов из скрипта  (Прочитано 4859 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Nickolaz

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 38
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Запуск скриптов из скрипта
« : 22 Ноября 2005, 12:08:44 »
Здравствуйте, многоуважаемые знатоки!

Эта тема логическое продолжение первой темы :), в решении которой очень помог NeoNox, за что ему отдельное спасибо!
Второй вопрос может покажется совсем уж простым, но тем лучше :)  
Как из запущенного скрипта запустить другие скрипты по циклу, но не ожидать конца их выполнения и не получать никаких данных, а после запуска последнего завершить выполнение.

Заранее спасибо за ответ!

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Запуск скриптов из скрипта
« Ответ #1 : 22 Ноября 2005, 12:15:42 »
perldoc -f fork
perldoc -f exec
The documentations is your friend

Оффлайн Nickolaz

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 38
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Запуск скриптов из скрипта
« Ответ #2 : 22 Ноября 2005, 13:34:16 »
NeoNox
Спасибо за совет! Но никак не получается запустить скрипты по циклу и не ждать конца их выполнения :( Уже всё перепробовал.

Может быть у Вас есть простенький пример запуска серии скриптов без возвращения результатов в родительский скрипт?

Поясню более детально: есть скрипт, который проверяет количество (и имена) процессов, которые на текущий момент запущены, затем, отталкиваясь от этого количества, он запускает другие скрипты (каждый из которых выполняться может и 3 часа) параллельно, а сам заканчивает работу. При этом в ps отображаются все запущенные скрипты...
Вроде всё просто звучит, но никак не могу найти ответ :(
Буду беспредельно благодарен за ответ! :)

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Запуск скриптов из скрипта
« Ответ #3 : 22 Ноября 2005, 14:54:26 »
Цитировать
Nickolaz:
Но никак не получается запустить скрипты по циклу и не ждать конца их выполнения Уже всё перепробовал.

Там не нужно ничего пробовать. Покажите что уже написано.
The documentations is your friend

Оффлайн Nickolaz

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 38
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Запуск скриптов из скрипта
« Ответ #4 : 22 Ноября 2005, 16:21:32 »
наверняка что-то неправильно :(

вот код:
#!/usr/bin/perl
$SIG{CHLD}=\'IGNORE\';
for ($i=0; $i<10; $i++)
{
$pid = fork();
if ($pid eq \'0\'){
   exec("perl scr.pl A$i");
   exit 0;
}
}


и scr.pl (не так важно что тут - но работать это что может дооолго :) ):
open (FILE,">file-".$ARGV[0]);
print FILE $ARGV[0]."\\n";
close FILE;

for (my $i=0;$i<100;$i++)
{
print $ARGV[0]."\\n";
}

Это всё, конечно, примерно. И наверное всё неправильно :(
Очень прошу помочь!!

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Запуск скриптов из скрипта
« Ответ #5 : 22 Ноября 2005, 17:15:22 »
тебе, похоже, форк не очень нужен. exec сам порождает процесс.

а так?

for ($i=0; $i<10; $i++)
{
       exec("perl scr.pl A$i");
}
The documentations is your friend

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Запуск скриптов из скрипта
« Ответ #6 : 22 Ноября 2005, 17:27:29 »
# cat > test.pl
#! /usr/bin/perl
print "@ARGV\\n";
exit;
^D
# chmod +x test.pl
# perl -e \'fork () == 0 && exec "./test.pl $_" foreach (1..$ARGV[0]);\' 10
1
2
3
4
5
6
8
9
# 7
10
#  perl -e \'exec "./test.pl $_" foreach (1..$ARGV[0]);\' 10
1
#

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Запуск скриптов из скрипта
« Ответ #7 : 22 Ноября 2005, 17:57:32 »
arto прав.
The documentations is your friend

Оффлайн Nickolaz

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 38
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
ОГРОМНОЕ СПАСИБО!
« Ответ #8 : 22 Ноября 2005, 18:59:26 »
arto, твой код действительно подходит именно для моих задач :)

Огромное спасибо, arto и NeoNox!
Вы мне очень помогли!
Этот форум - лучший из тех что я видел!!!


:beer:

Оффлайн Nickolaz

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 38
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Запуск скриптов из скрипта
« Ответ #9 : 22 Ноября 2005, 19:13:09 »
Сегодня праздник - узнал кое-что интересненькое, и поэтому позволю себе еще раз отвлечь arto :)

Не подскажешь, почему не работал мой код:

#!/usr/bin/perl
$SIG{CHLD}=\'IGNORE\';
for ($i=0; $i<10; $i++)
{
$pid = fork();
if ($pid eq \'0\'){
   exec("perl scr.pl A$i");
   exit 0;
}
}

?

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Запуск скриптов из скрипта
« Ответ #10 : 22 Ноября 2005, 20:38:32 »

#!/usr/bin/perl
$SIG{CHLD}=\'IGNORE\';

for ($i=0; $i<10; $i++)
{
        $pid = fork();
        if ($pid eq \'0\'){
            exec("perl scr.pl $i");
            exit 0;
        }
}


scr.pl:

#!/usr/bin/perl
open FH, \'>>\', \'./aaa\';
print FH $ARGV[0]."--".$$."\\n";
close FH;

в файле ааа найдешь 10 записей типа 
0--9411
1--9412
2--9413
3--9414
4--9415
5--9416
7--9418
8--9419
6--9417
9--9420
The documentations is your friend

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Запуск скриптов из скрипта
« Ответ #11 : 22 Ноября 2005, 21:55:45 »
# perl -e \'$SIG{CHLD}="IGNORE"; foreach (0..9) { $pid = fork (); if ($pid == 0) { exec "./test.pl","A$_"; exit; }}\'
A0
A1
A2
A3
A4
A5
A6
A7
A8
# A9

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28