Страница 1 из 1
выполнение команды с другого сервера?
Добавлено: 2009-09-24 12:40:12
f0s
Возник следующий вопрос..
есть (опустим подробности) два сервера:
fileserver.artpaint [192.168.10.6]
mail.artpaint [192.168.10.8]
на fileserver.artpaint стоит самба и есть шары. мне нужно выводить на веб-сайт скриптом список открытых файлов с шар (посредством smbstatus). Сайт хостится на mail.artpaint... отсюда вопрос: как можно сделать так, чтобы скрипт выполнялся на fileserver.artpaint?
скрипт следующего плана:
Код: Выделить всё
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html>
<head>
<title>User use file.</title>
</head>
<body>
<table align=\"center\">
<tr><th>User</th><th>File</th><tr>
<tr>";
for (`smbstatus`) {
$users{$1} = $2 if (/\s*(\d+)\s+(.+?)\s+(.+)\s+(.+)\s+\((.+)\)/);
print " <td>$users{$1}</td><td>$2</td>\n" if (/(\d+).*?\/usr\/home\/public\/shared(.*)\s{3}/);
};
print " </tr>
</body>
Re: выполнение команды с другого сервера?
Добавлено: 2009-09-24 12:49:16
Gamerman
Навскидку идея такая:
Поднять веб-сервер на самба-сервере, и при запуске скрипта на первой машине, чтобы он обращался к скрипту на второй машине через веб-сервер.
Re: выполнение команды с другого сервера?
Добавлено: 2009-09-24 13:00:14
f0s
Gamerman писал(а):Навскидку идея такая:
Поднять веб-сервер на самба-сервере, и при запуске скрипта на первой машине, чтобы он обращался к скрипту на второй машине через веб-сервер.
хотелось бы без поднятия веб-сервера на fileserver
Re: выполнение команды с другого сервера?
Добавлено: 2009-09-24 13:10:38
Gamerman
Я думаю так:
1.Для того чтобы второй сервер что-то сделал, он должен либо получить сигнал, либо делать это с какой-то периодичностью.
Второй вариант не катит, потому что-даные могут быть не актуальными либо будет вхолостую делать работу.
Тогда первый вариант.
Один из вариантов приход пакета на определенный порт. Можно написать какой-то простой демон, который будет слушать порт.
Тогда скрипт на первой машине будет обращаться на даный порт и вторая машина сможет обработать такой сигнал.
2. Еще идея. Писать по смб какой-то файл на вторую машину. Есть демон (не помню как называется), который проверяет наличие файла и делает какое-то действие, например выводит список открытых файлов.
Будет интересно узнать, какие еще есть методы?
Re: выполнение команды с другого сервера?
Добавлено: 2009-09-24 13:28:38
napTu
если скрип выполняется быстро, то запускать его можно через
Код: Выделить всё
$rezul=`ssh второй_сервер скрипт_на_втором_сервере`
но нужно установить доступ ssh по ключам
Re: выполнение команды с другого сервера?
Добавлено: 2009-09-24 15:57:02
f0s
сделал так:
на mail.artpaint зашел под пользователем
artpaint (под нима работает сайт):
Код: Выделить всё
ssh-keygen
Enter file in which to save the key (/home/artpaint/.ssh/id_rsa):<Enter>
Enter passphrase (empty for no passphrase):<Enter>
Enter same passphrase again: <Enter>
Your identification has been saved in /home/artpaint/.ssh/id_rsa.
Your public key has been saved in /home/artpaint/.ssh/id_rsa.pub.
The key fingerprint is:
92:12:4c:сс:c8:36:ec:f6:60:50:c4:82:2a:01:39:20 artpaint@mail.artpaint
далее:
Код: Выделить всё
scp ~/.ssh/id_rsa.pub fileserver.artpaint:.ssh/authorized_keys2
таким образом сделал, что по ssh fileserver пускает без пароля. теперь немного модифицировал скрипт:
Код: Выделить всё
[f0s@mail] /var/log/httpd/> cat /home/artpaint/www/data/www.artpaint/stat/files/index.pl
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><head><title>User use file.</title></head><body>
<table align=\"center\"><tr><th>User</th><th>File</th></tr><tr>";
for (`ssh 192.168.10.6 smbstatus`) {
$users{$1} = $2 if (/\s*(\d+)\s+(.+?)\s+(.+)\s+(.+)\s+\((.+)\)/);
print "<td>$users{$1}</td><td>$2</td>\n" if (/(\d+).*?\/usr\/home\/public\/shared(.*)\s{3}/);
};
print "</tr></body>";
так скрипт из консоли нормально работает:
вот вывод с тачки где веб-сервер (mail.artpaint)
Код: Выделить всё
$ cd /usr/home/artpaint/www/data/www.artpaint/stat/files
$ ls
index.pl
$ ls -l
total 2
-rwxr-xr-x 1 artpaint artpaint 415 24 сен 14:57 index.pl
$ ./index.pl
Content-type: text/html
<html><head><title>User use file.</title></head><body>
<table align="center"><tr><th>User</th><th>File</th></tr><tr><td>suchkova</td><td> о. Бухгалтерия/Сучкова Н/Мой файл 2009.xls</td>
<td>olyunin</td><td> о. Продаж/Олюнин Д</td>
<td></td><td> о. Рекламы/Передельская Е/История завода/Новая папка1/2_1.ai</td>
<td>zaycev</td><td> .</td>
<td>lukov</td><td> .</td>
<td>cherepkov</td><td> .</td>
<td>sedova</td><td> .</td>
<td>olyunin</td><td> .</td>
<td>maslyakova</td><td> .</td>
<td>suchkova</td><td> .</td>
<td>yatskaya</td><td> .</td>
<td></td><td> о. Рекламы/olefirenko/фото для сайта/логотипы/краски кисти/Лого.ai</td>
<td></td><td> о. Рекламы/Передельская Е/История завода/Новая папка1/2_1.eps</td>
<td></td><td> о. Рекламы/Передельская Е/История завода/Новая папка1/2_2.eps</td>
<td>cherepkov</td><td> о. Финансовый/Васильева А/себестоимость/Виктор</td>
<td>lukov</td><td> о. Рекламы/olefirenko/image/фото для листовки</td>
<td>zaycev</td><td> о. Склад/ЗАЯВКИ НА ДОСТАВКУ 2007-2008-2009/2009</td>
<td>maslyakova</td><td> о. Склад/ЗАЯВКИ НА ДОСТАВКУ 2007-2008-2009/2009</td>
<td>suchkova</td><td> о. Бухгалтерия/Сучкова Н</td>
<td></td><td> о. Рекламы/Передельская Е/История завода/Новая папка1/2_2.ai</td>
<td>sedova</td><td> о. Финансовый/Седова Е/Фин. директор</td>
</tr></body>$
как только открываешь браузером:
http://www.artpaint/stat/files/index.pl получаем:
Error 500
причем в логах апача:
Код: Выделить всё
[Thu Sep 24 14:57:37 2009] [error] [client 192.168.10.2] Premature end of script headers: index.pl

Re: выполнение команды с другого сервера?
Добавлено: 2009-09-24 21:26:46
Alex Keda
сдаётся мне, заголовков маловато...
Код: Выделить всё
hosting$ more ~lissyara/www/data/cgi-bin/standard.map.sh
#!/bin/sh
echo "Content-type: text/plain"
echo
echo "User-agent: *"
echo "Disallow: /cgi-bin/";
echo "Disallow: /admin_level/";
echo "Disallow: /manual/";
echo "Disallow: /icons/";
echo "Disallow: /scripts/";
ls $DOCUMENT_ROOT/map | grep map_ |
{
while read file
do
echo "Sitemap: http://$SERVER_NAME/map/$file"
done
}
echo "Host: $HTTP_HOST"
exit 0;
hosting$
это у меня роботс.тхт такой

))
Re: выполнение команды с другого сервера?
Добавлено: 2009-09-25 8:56:51
f0s
на другом сайте, на этом же сервере работало, а в этом нет.. выяснил, что права на скрипт-то я поставил, а вот на папку, которую создал в сайте - нет. после этого все взлетело
