こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Linuxのcronとrc.localでの制御について

こんばんは、皆さん。
先頭行が#!/usr/bin/perlから始まる簡単なPerlスクリプトを書き、
実行権を777にし、/etc/rc.localとrootのcronに記述しました。
記述した内容が間違っていないと仮定した場合、動作しますか?
質問の仕方がよくないと思いますが、つまり、cronや/etc/rc.localは
シェルスクリプトでないと制御できないのでしょうか?
実際に試してみましたが、シェルならうまくいくのですが、
Perlを起動できていないようです。
どうすればcronや/etc/rc.localでPerlを扱えるのでしょうか?
よろしくお願いします。

投稿日時 - 2006-05-10 01:44:52

QNo.2141748

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

0 0 * * * root /home/test/test.pl 1>/home/test/output.txt

rootは不要でした。すみません。

0 0 * * * /home/test/test.pl > /home/test/output.txt

test.plはあなたが#3に書いたものでいいです。
というか、ちゃんと動くものなら何でもいいです。
どんな複雑なもんでもどうぞご自由に。

投稿日時 - 2006-05-11 01:36:56

補足

どうやらこちらのカテゴリで質問すべき内容ではなかったようです。
Perlに限らず、Cでも同様と思われますので、Linuxカテゴリで質問すべきでした。
ちなみにlogger~はloggerコマンドを実行しています。
この説明はググればどこにでも出ている簡単なものですので、
詳細な説明はそちらにゆずるとします。
回答ありがとうございました。

投稿日時 - 2006-05-11 21:54:44

ANo.3

書式通りかけば普通にperlスクリプトも実行できると思います。ただ、例がprint文なので、出力先を適当に指定してやらなければいけないのでは?と思います。
0 0 * * * root /home/test/test.pl 1>/home/test/output.txt
とすれば output.txt
に出力されませんか?適当なterminalの標準出力に出力する方法も有るのかも知れませんが、私は知りません。

system("logger -p local6.info -i -t test OK");
は私の知識不足で何をやっているのか分からないのですが。教えて頂けたら嬉しいです。

投稿日時 - 2006-05-10 23:33:40

補足

0 0 * * * root /home/test/test.pl 1>/home/test/output.txt
と上記のとおりcrontabに記述してみたところ、
0バイトのファイルが作成されるだけでした。
test.plの内容はどのようにすればよいのでしょうか。
試したのは、
#!/usr/bin/perl
print "test";
です。
なお、Perlスクリプトに実際に記述するものは複雑なスクリプトです。
まず簡単なスクリプトで動作しないことには使えないので、
代表としてprint文で試してみました。
実際はファイルに出力すればよいだけではないので、
任意のPerlスクリプトが実行できないと要件が満たせないことになります。
よろしくお願いします。

投稿日時 - 2006-05-11 00:10:27

ANo.2

まず、これはあまり関係ないことですが、パーミッションを 777 にするのはセキュリティー上おすすめできません。せめて 755 とかにしておきましょう。

で、そのスクリプトに Perl の文法上の間違いがなく、尚且つ普通にログインしてコマンドラインから実行した時に正常動作するとしても、たとえばそのスクリプトの中から system() などで他のプログラムを動かしていた場合、環境変数の PATH の違いによっては正常動作しない可能性がありますよね。そういった実行時の違いで動かないということがないか再度確認された方がいいと思います。

投稿日時 - 2006-05-10 13:52:36

補足

今回はパーミッションが原因でないことを強調するために777としました。
system()を使わない場合でも試してみましたができませんでした。
全てのコマンドについてフルパスで指定しましたので、環境変数の誤りではないようです。
実際に動作するrc.localやcronの設定、Perlスクリプトの例文をそれぞれご回答いただけたらうれしいです。
よろしくお願いします。

投稿日時 - 2006-05-10 22:05:46

ANo.1

cron については sh を実行するので「スクリプトのファイル名を書いただけ」ではダメだと思います. perl を実行するように明記すれば OK?
あるいは
/path/to/perl "$0.pl"
って行だけのシェルスクリプト書いておいて, 実際の処理内容は「なんちゃら.pl」という Perl スクリプトに投げるってのも可能かな.

投稿日時 - 2006-05-10 08:53:44

補足

実際の設定は次のとおりです。
$ su -
# crontab -e
--------------------
* * * * * root /path/to/perl /home/test/test.pl
--------------------
# ls -l /home/test/test.pl
-rwxrwxrwx 1 test test 12345 5月 1 10:00 test.pl
# cat /home/test/test.pl
--------------------
#!/usr/bin/perl
print "OK\n";
system("logger -p local6.info -i -t test OK");
--------------------

$0.plはスクリプト名をどこに指定するのでしょうか?
次のようにした場合、$0の内容はどうリンクするのでしょうか?
# crontab -e
--------------------
* * * * * root /path/to/perl "$0.pl"
--------------------
試しに次のようにしてみたところ、やはり動きません。
# crontab -e
--------------------
* * * * * root /bin/bash /home/test/test.sh
--------------------
# vi /home/test/test.sh
--------------------
#!/bin/bash
/path/to/perl /home/test/test.pl
--------------------
Perlスクリプトは手動では問題なく動作します。
またcronも簡単なシェルスクリプトを作成して試しましたので、
動作は問題ないことは確認済みです。
Perlスクリプトを実行可能な方法をご存知でしたら教えてください。
もしできないということでしたら、その理由も知りたいです。
少なくとも実行可能にする方法がないということだけでも知りたいです。
よろしくお願いします。

投稿日時 - 2006-05-10 21:54:49

あなたにオススメの質問