- 締切済み
Linuxのcronとrc.localでの制御について
こんばんは、皆さん。 先頭行が#!/usr/bin/perlから始まる簡単なPerlスクリプトを書き、 実行権を777にし、/etc/rc.localとrootのcronに記述しました。 記述した内容が間違っていないと仮定した場合、動作しますか? 質問の仕方がよくないと思いますが、つまり、cronや/etc/rc.localは シェルスクリプトでないと制御できないのでしょうか? 実際に試してみましたが、シェルならうまくいくのですが、 Perlを起動できていないようです。 どうすればcronや/etc/rc.localでPerlを扱えるのでしょうか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- HoComeCome
- ベストアンサー率27% (44/160)
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に書いたものでいいです。 というか、ちゃんと動くものなら何でもいいです。 どんな複雑なもんでもどうぞご自由に。
- HoComeCome
- ベストアンサー率27% (44/160)
書式通りかけば普通に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"); は私の知識不足で何をやっているのか分からないのですが。教えて頂けたら嬉しいです。
補足
0 0 * * * root /home/test/test.pl 1>/home/test/output.txt と上記のとおりcrontabに記述してみたところ、 0バイトのファイルが作成されるだけでした。 test.plの内容はどのようにすればよいのでしょうか。 試したのは、 #!/usr/bin/perl print "test"; です。 なお、Perlスクリプトに実際に記述するものは複雑なスクリプトです。 まず簡単なスクリプトで動作しないことには使えないので、 代表としてprint文で試してみました。 実際はファイルに出力すればよいだけではないので、 任意のPerlスクリプトが実行できないと要件が満たせないことになります。 よろしくお願いします。
- ___noboru___
- ベストアンサー率28% (33/117)
まず、これはあまり関係ないことですが、パーミッションを 777 にするのはセキュリティー上おすすめできません。せめて 755 とかにしておきましょう。 で、そのスクリプトに Perl の文法上の間違いがなく、尚且つ普通にログインしてコマンドラインから実行した時に正常動作するとしても、たとえばそのスクリプトの中から system() などで他のプログラムを動かしていた場合、環境変数の PATH の違いによっては正常動作しない可能性がありますよね。そういった実行時の違いで動かないということがないか再度確認された方がいいと思います。
補足
今回はパーミッションが原因でないことを強調するために777としました。 system()を使わない場合でも試してみましたができませんでした。 全てのコマンドについてフルパスで指定しましたので、環境変数の誤りではないようです。 実際に動作するrc.localやcronの設定、Perlスクリプトの例文をそれぞれご回答いただけたらうれしいです。 よろしくお願いします。
- Tacosan
- ベストアンサー率23% (3656/15482)
cron については sh を実行するので「スクリプトのファイル名を書いただけ」ではダメだと思います. perl を実行するように明記すれば OK? あるいは /path/to/perl "$0.pl" って行だけのシェルスクリプト書いておいて, 実際の処理内容は「なんちゃら.pl」という Perl スクリプトに投げるってのも可能かな.
補足
実際の設定は次のとおりです。 $ 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スクリプトを実行可能な方法をご存知でしたら教えてください。 もしできないということでしたら、その理由も知りたいです。 少なくとも実行可能にする方法がないということだけでも知りたいです。 よろしくお願いします。
補足
どうやらこちらのカテゴリで質問すべき内容ではなかったようです。 Perlに限らず、Cでも同様と思われますので、Linuxカテゴリで質問すべきでした。 ちなみにlogger~はloggerコマンドを実行しています。 この説明はググればどこにでも出ている簡単なものですので、 詳細な説明はそちらにゆずるとします。 回答ありがとうございました。