Как запустить фоновый процесс один за другим - PullRequest
2 голосов
/ 01 февраля 2012

Я использую Perl CGI.Я запускаю команду SCP через Perl CGI в фоновом режиме.Например,

system("scp -r machinename:/PathOfFile/ /Path/WhereToCopyIt/  &")

Этот процесс копирования занимает некоторое время, скажем, 15 минут.Теперь я хочу, когда процесс копирования завершится, тогда пришлите мне письмо.Но моя проблема в том, что эта команда работает в фоновом режиме.Так как я могу отправить письмо?Я знаю, как отправлять почту, но не знаю, как отправлять почту, когда процесс работает в фоновом режиме.

Ответы [ 2 ]

5 голосов
/ 01 февраля 2012

Почему бы не fork?

my $pid = fork;

if ( $pid == 0 ) {   # Child

    exec( ... );  # Without the '&'
    exit( $? >> 8 );
}

else {               # Parent

    waitpid $pid, 0;
}

См. perldoc perlfork и perldoc perlipc для получения дополнительной информации (возможно, слишком много?) информация.

1 голос
/ 01 февраля 2012

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

system(qq'sh -c "scp -r machinename:/PathOfFile/ /Path/WhereToCopyIt/; 
          echo Done | /sendmail you@example.net" &') 

Возможно, вы хотите инкапсулировать фоновый скрипт в отдельный файл или хотя бы добавить проверку ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...