[PHP-users 12422] Re: system からパスワードを渡すには。。

HOTTA Michihide php-users@php.gr.jp
Tue, 07 Jan 2003 14:49:25 +0900


堀田@諫早市です。本年もよろしくお願いします。

On Tue, 7 Jan 2003 11:29:46 +0900
"go" <go@qandp.co.jp> wrote:

> goともうします。経験が浅く知識不足から、ご教授願いたいことがあります。
> 
> OS:RedHat8.0
> PHP:4.2.2
> 
> webからサーバにある動作を予約したいと考えております。
> 
> phpのsystemコマンドをつかってあるユーザ権限でシェルスクリプトを書いたファイ
> ルをatで時間予約して呼び出したいと思ってます。
> 
> シェルスクリプト=shellsc.txt
> phpファイル=phpcommand.php
(snip)
> <?php
> $command="su - user -c \"at -f /home/user/shellsc.txt now + 1 minutes\"";
> $pass="userpassword";
> print system($command);
> print system($pass);
> ?>
> 
> としてもatqで確認したところジョブが渡されていません。

Vine Linux 2.5 + updates + PHP-4.2.3 ですが、expect(1) を使った
ら、とりあえずは動きました。

hotta@fsrv ~/public_html$ cat /home/hotta/shellsc.txt
#!/bin/bash
echo mailing from shellrc.txt | mail hotta@net-newbie.com

hotta@fsrv ~/public_html$ cat phpcommand.php
<?php
print system("./phpcommand.exp");
?>

hotta@fsrv ~/public_html$ cat phpcommand.exp
#!/usr/bin/expect -f
set USER hotta
set PASS naisho
spawn su - $USER -c "at -f /home/$USER/shellsc.txt now + 1 minutes"
expect "Password:"    {
    send "$PASS\r"
}
expect job

hotta@fsrv ~/public_html$ wget -q http://localhost/~hotta/phpcommand.php

hotta@fsrv ~/public_html$ atq
8       2003-01-07 14:08 a hotta

> もしくは、やり方、考え方自体がおかしいのであれば、お教えを頂きたいです。

たとえば shellsc.txt を cron で user 権限で一分ごとに動かして
(時間がかかる処理の場合は、二重起動防止のしかけも必要かも?)、
その中で特定のファイルが存在する場合のみ実際の処理を実行するよ
うにしておく。phpcommand.php では特定のファイルを作成するだけ、
とかでも実現できそうですね。

user 数や処理の種類が多い場合は、DBと組み合わせることも一考の
価値があるでしょう。
-- 
HOTTA Michihide <hotta@net-newbie.com> <http://www.net-newbie.com>