Страница 1 из 1
CGI трансакция?
Добавлено: 2008-08-18 1:26:10
ProFTP
есть cgi дижок, perl
нужно выполнить пару команд через system(), если клиент нажмен в браузере Stop, то получаеться что выполнение может не полностью закончиться?
если оно будет пару секунд, например?
как тут нужно сделать? или какой-то другой функцией?
Re: CGI трансакция?
Добавлено: 2008-08-18 2:07:05
zingel
в обратных ковычках с проверкой......
``; - замена system() && exec()
Re: CGI трансакция?
Добавлено: 2008-08-18 4:00:23
ProFTP
не понял
есть например:
Код: Выделить всё
system("cp 1 2");
system("cp 1 3");
system("cp 1 4");
Как тут связать с exec? что за кавычки?
как это называеться чтобы в гугле найти? не нашел
Re: CGI трансакция?
Добавлено: 2008-08-18 4:31:30
zingel
Re: CGI трансакция?
Добавлено: 2008-08-18 4:36:52
ProFTP
там полностью не написано, вот так должно быть?
Код: Выделить всё
exec (cp 1 4') or print STDERR "couldn't exec foo: $!";
{ exec ('cp 1 4') }; print STDERR "couldn't exec foo: $!";
{ exec ('cp 1 4') }; print STDERR "couldn't exec foo: $!";
Код: Выделить всё
If there is more than one argument in LIST, or if LIST is an
array with more than one value, calls execvp(3) with the argu-
ments in LIST. If there is only one scalar argument or an
array with one element in it, the argument is checked for shell
metacharacters, and if there are any, the entire argument is
passed to the system's command shell for parsing (this is
"/bin/sh -c" on Unix platforms, but varies on other platforms).
If there are no shell metacharacters in the argument, it is
split into words and passed directly to "execvp", which is more
efficient. Examples:
exec '/bin/echo', 'Your arguments are: ', @ARGV;
exec "sort $outfile | uniq";
в том доке, не понятно это, и нафига мне тут echo, и как 3 функции сюда вставить...?
Re: CGI трансакция?
Добавлено: 2008-08-18 5:28:50
zg
ProFTP писал(а):если клиент нажмен в браузере Stop, то получаеться что выполнение может не полностью закончиться?
ага

для решения этой проблемы нужно сделать отложенные задания, то есть ты даёшь задание скрипту - "скопировать файлы туда-то" или "убить всю систему", но скрипт не выполняет их сразу, он кладёт задания в базу. По крону, уже другой скрипт, смотрит какие задания есть в базе и выполняет независимо от удалённого пользователя.
Re: CGI трансакция?
Добавлено: 2008-08-18 5:45:24
zingel
Код: Выделить всё
my $cp1 = `cp 1 2`;
my $cp2 = `cp 2 3`;
my $cp3 = `cp 3 4`;
вот так правильнее, вот тут в чём вся мощщщ кавычек....без всяких сраных system()
Re: CGI трансакция?
Добавлено: 2008-08-18 5:57:08
ProFTP
zg писал(а):ProFTP писал(а):если клиент нажмен в браузере Stop, то получаеться что выполнение может не полностью закончиться?
ага

для решения этой проблемы нужно сделать отложенные задания, то есть ты даёшь задание скрипту - "скопировать файлы туда-то" или "убить всю систему", но скрипт не выполняет их сразу, он кладёт задания в базу. По крону, уже другой скрипт, смотрит какие задания есть в базе и выполняет независимо от удалённого пользователя.
именно так и делаю!
сейчас кое-что другое, но все равно эта трансакция остаеться...
кстате, а webmin работает в apache от рута или нет? по-моиму от рута, как он тогже конфиги меняет, или он записывает в свою БД и потом парсит и выполняет отдельно чтоли?
Re: CGI трансакция?
Добавлено: 2008-08-18 6:01:32
zingel
вебмин работает от всего, чудная программа, если хочеш чтобы твой сервер зарутали - поставь вебмин...
Re: CGI трансакция?
Добавлено: 2008-08-18 6:18:31
ProFTP
кстате, в инсталяторе webmin высталяеться владелец root на все каталоги...
от рута тогда запускать можно скрипты apache или нет? фиг знает как лучше
а какие программы записывают в БД с начало, а потом выполняют?
вот такое регуляртное выражение подойдет для безопасности?
если в вводе есть не буква и не цифра, то выдаст ошибку...

Re: CGI трансакция?
Добавлено: 2008-08-18 11:04:40
zg
ProFTP писал(а):если в вводе есть не буква и не цифра, то выдаст ошибку...

это неверный путь, пробел - не буква и не цифра, но его наличие доспускается в имени файла, _ (земля) тоже не буква и не цифра, но тоже очень распространён, - (минус) тоже самое, и ещё куча нужных символов.
ProFTP писал(а):от рута тогда запускать можно скрипты apache или нет?
всё можно, но иногда только один раз....

а если нужно не всё, то sudo вполне подойдёт.
Скажи прямо, чего тебе нужно сделать?
Re: CGI трансакция?
Добавлено: 2008-08-19 11:38:03
ProFTP
нужно сделать несколько system функций, еще видел используеться где-то демон Сишный, может он паралельно использует system от скрипта?
(это не срочно надо, просто хотел спросить как запустить пару system функций)
Re: CGI трансакция?
Добавлено: 2008-08-19 19:42:23
zg
демон от крона отличается только скоростью обработки и сложностью реализации. Демон можно писать не только на C, но и на перле и на пхп. Только у демона одна трабла есть - на каждый запрос обычно идёт форк и процессы идут параллельно, а кроновый скрипт пораждает один процесс и обработка может идти как последовательно так и параллельно. Ну и использование демона с правами рута (также как и крона) ничего хорошего для безопасности не сулит.
Re: CGI трансакция?
Добавлено: 2008-09-03 2:42:34
ProFTP
по-моиму я нашел, елси это оно ...
Код: Выделить всё
package User;
@ISA = qw(Object::Transaction);
use Object::Transaction;
my $top = "/some/path";
sub new {
my ($package, $login) = @_;
die unless getpwnam($login);
return bless { UID => getpwnam($login) };
}
sub file {
my ($ref, $id) = @_;
$id = $ref->id() unless $id;
return "$top/users/$id/data.storable";
}
sub id {
my ($this) = @_;
return $this->{UID};
}
sub preload
{
my ($id) = @_;
return if getpwuid($id);
return getpwnam($id) if getpwnam($id);
die;
}
sub postload
{
my ($this) = @_;
my ($name,$passwd,$uid,$gid,$quota,$comment,$gcos,$dir,
$shell,$expire) = getpwuid($this->{UID});
$this->{SHELL} = $shell;
}
sub presave
{
my ($this, $old) = @_;
my $id = $this->{UID};
mkdir("$top/users/$id", 0700);
delete $this->{SHELL};
}
sub postsave
{
goto &postload;
}
sub postremove
{
delete from pw file...
}
my $joe = new User "joe";
$joe->savelater();
my $fred = new User "fred";
$fred->savelater();
$joe->commit();
http://search.cpan.org/~muir/Object-Tra ... action.pod