• 締切済み

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

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

noname#17299
noname#17299
  • Perl
  • 回答数4
  • ありがとう数1

みんなの回答

回答No.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に書いたものでいいです。 というか、ちゃんと動くものなら何でもいいです。 どんな複雑なもんでもどうぞご自由に。

noname#17299
質問者

補足

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

回答No.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"); は私の知識不足で何をやっているのか分からないのですが。教えて頂けたら嬉しいです。

noname#17299
質問者

補足

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

回答No.2

まず、これはあまり関係ないことですが、パーミッションを 777 にするのはセキュリティー上おすすめできません。せめて 755 とかにしておきましょう。 で、そのスクリプトに Perl の文法上の間違いがなく、尚且つ普通にログインしてコマンドラインから実行した時に正常動作するとしても、たとえばそのスクリプトの中から system() などで他のプログラムを動かしていた場合、環境変数の PATH の違いによっては正常動作しない可能性がありますよね。そういった実行時の違いで動かないということがないか再度確認された方がいいと思います。

noname#17299
質問者

補足

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

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

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

noname#17299
質問者

補足

実際の設定は次のとおりです。 $ 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スクリプトを実行可能な方法をご存知でしたら教えてください。 もしできないということでしたら、その理由も知りたいです。 少なくとも実行可能にする方法がないということだけでも知りたいです。 よろしくお願いします。

関連するQ&A

  • cronとrc.localへの記述内容について

    こんばんは、皆さん。 先頭行が#!/usr/bin/perlから始まる簡単なPerlスクリプトを書き、 実行権を777にし、/etc/rc.localとrootのcronに記述しました。 記述した内容が間違っていないと仮定した場合、動作しますか? 質問の仕方がよくないと思いますが、つまり、cronや/etc/rc.localは シェルスクリプトでないと制御できないのでしょうか? 実際に試してみましたが、シェルならうまくいくのですが、 Perlを起動できていないようです。 すべてフルパスで指定しているのでパスの問題ではないようです。 実行権もフルアクセスにしてみたので関係ないと思います。 どうすればcronや/etc/rc.localでPerlを扱えるのでしょうか? cronや/etc/rc.local、Perlスクリプトのサンプルを例として 挙げていただけると助かります。 一般的にPerlスクリプトは実行できないのでしょうか? もし実行できなければ、その理由も知りたいです。 よろしくお願いします。

  • Puppy Linuxで cron を使用するには

    Puppy Linux で ダイナミックDNS(DDNS)を使う準備のために,cron を使った定時処理の仕方をテストしていますが,機能しません.ご教授ください.   1)OSは,PuppyLinux4.3.1を使用しています. DDNS は,ieServer のサイトを利用.WEBブラウザ上では,DNSの更新はできています.数分後,ping コマンドを,サブドメイン名で実行すると名前が解決されています.      2)ps コマンドで見ると,デーモンが動いていないようなので /usr/sbin/crond とキーインし,デーモン起動します.   3)「ieserver専用IPアドレス更新スクリプト」ページ(http://ai-line.com/linux/ddns.html#6)の内容を参考に,Perl のプログラムを /etc/DDNS ディレクトリのダウンロードし,変数をセットし,このプログラム単体では,正常動作を確認しています.   4)エディタで,上のサイトの設定ファイルを, /var/spool/cron に root とう名称で作成しました.(下) ---------------------------------------- SHELL=/bin/bash PASH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run - parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron/monthly # Dynamic_DNS */10 * * * * root perl /usr/DDNS/IP_Set_ie.pl ---------------------------------------- いくら待っても,IP_Set_ie.pl が実行された様子がなく(old_ipのタイムスタンプが変化なし),DNSの更新がされません. どのような,間違いがあるのであしょうか? ご教授願います.

  • cronについて

    centos4を使っています。 初期設定?なのかは解らないのですが、root権限で1秒ごとに 下記のcronが登録されていました。 これはどのような意味があるのでしょうか。 /usr/bin/envdir.sh /etc/relay-ctrl /usr/bin/relay-ctrl-age

  • cronが動かない

    cron初心者なのでお願いいたします。 fedora5で以下のようなCronを動かそうとしています。 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin HOME=/htdocs/program 45 18 * * * perl U9901.pl rootで作成し、/var/spool/cronのrootの実行権限は755になっています。 しかし実行されません。 編集後、crondは再起動しています。 どのような原因が考えられますでしょうか? 過去ログも見たのですが、それらしいものが無かったので質問させてください。 お願いします。

  • linuxの/etc/rc.local

    microwattR7.5(Ubuntu13.10とよく似たOSらしいです)の /etc/rc.local に起動時に実行したいコマンドを書き込んでも起動時に実行されません。理由をご存じの方・解決法をご存じの方がおられましたらご教示頂きたく思います。 microwattR7.5をセカンドマシンとして使っています。リモートで使おうと思い、x11vncをインストールしました。起動時にx11vncが起動したほうが便利なので、/etc/rc.local の「exist 0」の前に「/usr/bin/x11vnc -rfbauth /home/platon/.vnc/passwd -auth /home/platon/.Xauthority -display :0 -allow 192.168.0.13 -forever を書いたのですが、起動時に実行されません。(platon・192.163.0.13は一例)。 端末を起動して「/usr/bin/x11vnc -rfbauth /home/platon/.vnc/passwd -auth /home/platon/.Xauthority -display :0 -allow 192.168.0.17 -forever」と打ち込むとちゃんと実行されます。なぜでしょうか? /etc/rc.local の注意書きに # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. とあるので、/etc/rc.local を実行する権限がないのかと思ったのですが、パーミションが「-rwxr-xr-x」なので、実行する権限はあるのではと考えています。素人考えですが。 ご存じの方がおいででしたらよろしくお願いします。

  • DNSのcronデーモンが停止してしまう

    みなさん、こんにちは。 タイトルの質問です。 solarisでDNSサーバとメールサーバを兼用しています。 そのサーバでなぜかcrondがストップしてしましました。 # tail -10 /var/cron/olog ! ******* CRON ABORTED ******** (月) 1月 27 20:46:13 2003 ps -ef | grep cron で cron のプロセス(/usr/sbin/cron)が存在していません。 messages, syslog, dmesg には、 cronに関連したメッセージはありませんでした。 # /etc/rc2.d/S75cron start でもたちあがりません。 # cd /etc/rc3.d # sh -x ./S75cron start + /usr/bin/ps -e + /usr/bin/grep cron + /usr/bin/sed -e s/^ *// -e s/ .*// pid= + [ = ] + /usr/bin/rm -f /etc/cron.d/FIFO + [ -x /usr/sbin/cron ] + /usr/sbin/cron # ps -ef | grep cron root 21364 1 0 23:46:15 ? 0:00 /usr/sbin/cron で立ち上がりました。 外部からの侵入形跡はなく、どうしてクーロンが停止したのか 理由が分かりません。 どなたかお分かりになる方、教えてください。 宜しくお願い致します。

  • cron設定で電源のOFFができません。

    cron設定で電源のOFFができません。 cent OS 5.5 で自宅サーバーを立上げ勉強中です。 サーバーの電源を自動で18:00にONにして翌日の7:00にOFFにしたいと思います。 いろいろなホームページを参考にさせていただき、電源のONはパソコンのBIOS設定、OFFは"cron"を使うことできることがわかりました。 電源のONはパソコンのBIOS設定でできましたが、OFFができません。 設定は以下としています。 [root@Linux ~]# vi /etc/crontab CSHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly 0 7 * * * shutdown -h now #追加 [root@Linux ~]# /etc/rc.d/init.d/crond restart [root@Linux ~]#chkconfig crond on [root@Linux ~]# chkconfig --list crond crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@Linux ~]# /etc/rc.d/init.d/crond status crond (pid xxx) を実行中... 設定時間になっても電源がOFFになりません。 [root@Linux ~]# shutdown -h now ではOFFにできます。 (cent OS 5.5 をインストールしているパソコンは 富士通 FMV DESKPOWER CE18B 2002 年製です) よろしくお願いします。

  • ニフティでメールフォームを使用する方法

    ニフティの無料HPサービスでメールフォームを使いたいのですがsendmailが使えません。 以下の説明書きがありましたが、シェルスクリプトは知識がなく、ちょっと困っています。 シェルスクリプトでも可能なものなんでしょうか? ---------------------------------------------- perlについて perlのバージョンは5です。 (ただし、perl5での標準的なモジュールは使用できません) パスは、「/usr/local/bin/perl」となります。 スクリプトの1行目は「#!/usr/local/bin/perl」と記述してください。 シェルスクリプト(sh)について シェルスクリプト(sh)に関しては、以下のコマンドがご利用可能となっております。 awk, chmod, date, egrep, expr, grep, mkdir, rmdir, sh, cat, cp, echo, env, find, ls, mv, rm, sed なお、sendmailはご利用いただけません。 --------------------------------------------------

    • ベストアンサー
    • CGI
  • fedora11でのcron設定

    fedora11,apache,php5の環境でcronを使いたいのですが、動きません。。 状況が、 fedora11 php5 apache を使用していて、cronを使ってphpの定期実行を行いたいのですが、どうしてもうまくいきません。 かなりググってはみたのですが、liuxについては初心者なので、どうにもわかりません。 設定内容が、 /etc/crontabが、 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ * /1 * * * * apache /usr/bin/php /var/www/html/cron.php で、/var/log/cron でログを確認したところ Jul 28 19:00:01 host CROND[8417]: (apache) CMD (/usr/bin/php /var/www/html/cron.php) となっていてこれが一分ごとに出てきます。 cron.phpにはファイル追記の処理を書いてあります。 エラーではないようなのですが、ファイル操作が行われていないようなので動いていないようなのです。 ローカルホストでphpを実行したらちゃんと動くのでphp内のミスではないようです。 パーミッション関係だったらログにエラーが出そうなものですし、、、。困っています。。 どなたかお知恵を貸していただけませんでしょうか、よろしくお願いします。

  • パス(PATH)の設定ファイルについて

    OSはRed Hat Linux 9 を使用しております。 また、シェルはbashを使用しております。 ユーザがシステムにログインする際は、通常ですと /etc/profile ~/.bash_profile ~/.bash_login ~/.profile ファイルを読込、パス(PATH)の設定を行うと思いますが、 sshでrootユーザでシステムにログインした際は、 「echo $PATH」の結果は以下でした。 /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/sbin su -で再度rootユーザでログインした際、もしくは、他ユーザからsu -でログインすると 「echo $PATH」の結果は以下でした。 /bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin/X11:/usr/X11R6/bin:/root/bin:/sbin ログインの仕方でパス(PATH)に違いがあります。 また、「/usr/local/bin」をパス(PATH)として設定している記述が 上記ファイルに見当たりません。 http://sakaguch.com/PastBBS/0038/B0018808.html http://oshiete1.goo.ne.jp/kotaeru.php3?q=800405 等のサイトを参考に、以下ディレクトリ配下を確認しましても /etc/profile.d /etc/rc.d/init.d /etc/rc.d/rc3.d 「/usr/local/bin」をパス(PATH)として設定している記述が 見当たりません。 ログインの仕方でパス(PATH)に何故違いがあるのか、 また「/usr/local/bin」をパス(PATH)として設定している記述がある ファイルをご存知の方ご教授頂きたく思います。 宜しくお願いします。

専門家に質問してみよう