• 締切済み

system関数でatコマンドを呼び出して使用したいのですが

はじめまして、system関数について質問があります。 TVキャプチャが動作しているマシンがありまして(OSはFedoraCore6) そこでperlでCGIを作成して、その中で予約録画みたいなことがやり たいのですが、CGI中にsystem関数でatコマンドを利用して予約をして みたのですが、うまく動作しません。 $1 = 10; $2 = 20; system(`echo "xxxx.sh"|at $1:$2`); (xxxx.shはmencoderを起動するシェルスクリプト) みたいにしているのですが、atqなどで確認しても予約されていません。 どのようにしたらsystem関数からatコマンドが利用できるのでしょうか? ご教授よろしくお願いします。

みんなの回答

  • maura
  • ベストアンサー率46% (48/104)
回答No.3

すいません。大事なことを忘れていました。 CGIからコマンドを実行する時、PATH情報など 存在しないため、 ls は、 /usr/bin/ls とフルパスで指定する 必要があります。 よって echo , at についても  $ which echo [Enter] $ which ls [Enter] によって得られるパスを使用し バッククオートを使う場合は ----------------------------------------------------- $ref = `/usr/bin/echo "xxxx.sh"| /usr/sbin/at $1:$2`; ----------------------------------------------------- $ref の中にコマンド実行結果の標準出力が入ります。 # system 関数 及び OPEN 関数の説明は省略します ここで実行するユーザーは、Apache等が実行している ユーザーでコマンドが実行されるため、権限がないと うまくいかない場合は httpd.conf 等で実行ユーザーを 変更するとうまくいくでしょう。 CGIでシェルも実行できます。 1行目に #!/usr/bin/sh と記述すればいいだけです。 (PATH情報等がない事をお忘れなく)

perlwhite
質問者

お礼

maruさん、いろいろとご指導ありがとうございます。 現在、自宅PCに触れない状態でして(出張中) また戻り次第試してみたいと思います。 ・フルパスにて記述 ・実行しているユーザでの権限 上記の点、考えながらやってみたいと思います。 また後日、結果など報告したいと思います。 ありがとうございました。

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

atコマンドの使用権限はありますか? /etc/at.allowと /etc/at.deny はどうなってますか。 man atにて確認すると もし、上記の2ファイルがない場合は、スーパーユーザのみが使用可能となってます。 空の/etc/at.denyを作っておけば、全てのユーザが使用可能になる、と記述されています。

perlwhite
質問者

補足

早速のご回答有難う御座います。 tatsu99さんの御指摘されている点に関して確認してみましたが、 /etc/at.deny (内容は空)がありました。 gnome-terminal上からatコマンドを実行することはできます。 ($ echo xxxx.sh| at xx:xx [Enter]として一般ユーザで実行できています。)

  • maura
  • ベストアンサー率46% (48/104)
回答No.1

system 関数でバックスラッシュを使用しているのが 気になります。 system("echo xxxx.sh| at $1:$2"); かと。 シェルスクリプトがどんな出力を出しているか 見るにはOPEN関数で見るとわかりやすい ------------------------------------ $1 = 10; $2 = 20; open(SYS , "echo xxxx.sh|at $1:$2|"); while (<SYS>){ print $_; } close(SYS);

参考URL:
http://www.perl.com/doc/manual/html/pod/perlfunc/open.html
perlwhite
質問者

補足

mauraさん、ご回答有難う御座います。 最近perlを勉強しはじめたところなのですが、system関数に関する事をGoogle等で調べていたところ、 下記のようなお話があったので(一部を引用させて頂きます) >system が使えない場合は、バッククオートで試すと >良いでしょう。たぶん、経験から言って、以前Winだと、 >system() でも問題なく動くのに、HP-UX だと動かないという >事があり、散々悩んだ挙句、バッククオートで解決した事が >ありました バッククォートを使用した次第です。 説明が足らなくて申し訳ないのですが、ブラウザ上で操作をして (フォームで入力して)実行させてみたいということです。 perlで記述したCGIプログラム=シェルスクリプト?ではないですよね? それともシェルスクリプトで上記内容をテスト出力できるのでしょうか? まだまだ理解が足らない未熟者ですので、説明にも不足があり誠に申し訳ありません。 もう少し組み直して見たいと思います、何かお気づきな点がありましたら宜しくお願いします。

関連するQ&A

専門家に質問してみよう