XREAサーバーでのCRONTAB設定とシェルスクリプト記述方法

このQ&Aのポイント
  • XREAサーバーでのCRONTAB設定とシェルスクリプト記述方法について教えてください。
  • XREAサーバーの管理メニューからCRONジョブを選択し、CRONTABの設定とシェルスクリプトの記述を行うことができます。
  • 具体的な方法がわからず困っているので、詳細な手順や注意点を教えていただけると助かります。
回答を見る
  • ベストアンサー

XREAサーバーのCRONTAB設定とシェルスクリプト記述方法を教えて下さい

Linuxど素人の質問で恐縮です。 あるCGIを実行させるのにTera Term Pro(SSH対応版)というソフトでSSH接続しております。 なお、使用サーバーはXREAで広告免除サービスを利用してるのでSSH接続可能との事です。 下記コマンドが表示された状態で bash-2.05$ ./***.pl(リターン)で 手動では問題なく実行されます。  この***.plを5分おきに自動実行させる為には具体的にどうしたらいいのでしょうか? 例えばcronで下記の定期起動プログラムを作成すればよいのでしょうが 具体的な方法がわかりません。 */5 * * * * /usr/home/xxxxx/cgi-bin/***.pl  XREAの管理メニューからCRONジョブを選択しCRONTABの設定とシェルスクリプトの記述をすればよいらしいのですがここら辺の設定方法に関する質問はサポート外との事で困ってます。

noname#25821
noname#25821

質問者が選んだベストアンサー

  • ベストアンサー
  • fire--
  • ベストアンサー率49% (146/293)
回答No.5

>度々すみません。 >CRONジョブの設定は間違ってないと思いまが、何度か保存しなおし >ましたがうまく動作しません。。 話が見えたようです。 XREA管理画面でのCRON設定で直接perlを動かすことは できません。 そこには、まずshellを指定します。 例えば、/virtual/xxxxx/cron-1.sh 中身は ----------------------------------------------- #!/bin/sh #PERL /usr/local/bin/perl /virtual/xxxxx/mi_mlpost.pl exit ----------------------------------------------- このようにshellからperlのプログラムを動かします。 時間の指定方法は 0 */1 * * * で間違いありません。 試してみました。

noname#25821
質問者

お礼

おかげさまで無事、perlスクリプトの自動実行が正常に動作しました。 XREAの仕様で現在は1時間おきの実行が最短です。 メールによる投稿内容が掲示板に反映される時刻は 12:00 13:00 14:00とピッタリです。 希望は5分おきに実行したかったのですが、メーリングリストは大量メール(スパムメール等)に発展するおそれがあり、サーバーに負荷がかかる為かそのような仕様になっているのだと思います。 一応、個人認証による会員制の掲示板なのでそのような心配はないので改善要望をXREAにだしておきました。 最後までアドバイスしていただいたfire--さんに感謝申し上げます。

noname#25821
質問者

補足

>XREA管理画面でのCRON設定で直接perlを動かすことは >できません。 そうでしたか! 下記のようなスクリプト(cron1.sh)を秀丸エディタで作成し 改行コード「LF」で保存し、/virtual/xxxxxにアスキーモードにて アップロードしました。cron1.shのパーミッションは705にしてあります。 ----------------------------------------------- #!/bin/sh #PERL /usr/local/bin/perl /virtual/xxxxx/mi_mlpost.pl exit ----------------------------------------------- CRONジョブの編集で /virtual/xxxxx/[  ]欄にはcron1.shを入力後保存しました。 これで1時間後にスクリプトが自動実行できるか確認してみます。 私も先が見えてきました。ありがとうございました。

その他の回答 (4)

  • fire--
  • ベストアンサー率49% (146/293)
回答No.4

>1時間おきにジョブを実行させる設定にしましたが >残念ながらメール投稿機能が動作しません。 手動で動いて、cronで動かないとすると、 パーミッションの問題かもしれません。 スクリプトで書き込むファイルがあるディレクトリーの パーミッションは777になってますか。

noname#25821
質問者

補足

度々すみません。 CRONジョブの設定は間違ってないと思いまが、何度か保存しなおし ましたがうまく動作しません。。 現在、***.pl=mi_mlpost.plはセキュリティ上の関係で ホームディレクトリの上の階層に設置してあります。 mi_mlpost.pl内にメールアカウントとパスワードが記載 されてるので掲示板作者から推奨された場所に設置して あります。 FTP転送はFFFTPを用いておりますがディレクトリ(virtual/xxxxx) のパーミッションがどうなっているか確認できません。 上位ディレクトリ(virtual)まで移動できないからです。 /virtual/xxxxx/public_html        |       +mi_mlpost.pl(700)←作者推奨パーミッション 一時的にmi_mlpost.plを/virtual/xxxxx/public_html以下に設置 する事も可能ですから試してみようと思います。 結果報告はお礼の箇所にてご連絡します。 他に心あたりがあればアドバイス願います。

  • fire--
  • ベストアンサー率49% (146/293)
回答No.3

>実は***.plはメールによる掲示板への投稿スクリプト >(メーリングリスト機能)でして、 これは掲示板へ投稿するだけですか。 それとも投稿されたものを更にメール発信するのでしょうか。 前者ならば考え方を変えてcronを使わなくても良いかもしれません。 つまりcronで取り込むのではなく、webから掲示板へのアクセスがあったら、その最初に取り込みの処理を入れてしまえば良いのではないでしょうか。 後者については参考URLが使えるかもしれません。

参考URL:
http://sb.xrea.com/showthread.php?t=9343
noname#25821
質問者

補足

さらなるご協力ありがとうございます。 >これは掲示板へ投稿するだけですか。 はい***.plはメールにより掲示板に投稿するだけのスクリプトです(メール投稿機能) >それとも投稿されたものを更にメール発信するのでしょうか。 掲示板にはこの機能もありますが、***.plとは全く無関係で他のCGIが行ってくれます (メール配信機能)  下記掲示板の設置を試みてますので参照していただけたらありがたいです。 http://www.megumi-island.net/cgi.html#bbs 1時間おきにジョブを実行させる設定にしましたが 残念ながらメール投稿機能が動作しません。 bash-2.05$ ./***.pl(リターン)で 手動では問題なく実行されます。  

  • fire--
  • ベストアンサー率49% (146/293)
回答No.2

> 本題ですが例えば1時間おきにジョブを実行させるには > > CRONジョブの編集画面で設定0の箇所は下記のように入力して > > 分   時   日   月  曜日 > 0   */1  *   *   * > > /virtual/xxxxx/(空欄)に***.plを入力して保存すればいいのですね? そういう事です。 > > それと一番下の「シェルスクリプトの例」は空欄でよいですか? 例が入っていると思いますので、そのままにして おけば良いです。わざわざ空欄にする必要もありません。

noname#25821
質問者

補足

よくわかりました。これで良回答とさせていただきますが、 実は***.plはメールによる掲示板への投稿スクリプト(メーリングリスト機能)でして、 XREAの仕様により1時間が最短ですから掲示板に反映されるのが最悪1時間後 というのは遅いのでなんとか5分間隔程度で実行できるようにできないでしょうか? これはXREAにも要望してみます。

  • fire--
  • ベストアンサー率49% (146/293)
回答No.1

XREA管理画面の一部を以下に引用しました。 書き方は設定画面に、ken2005さんが書いたとおり 分 時 日 月 曜日 の下に */5 * * * * を入れれば良いのでしょうが、要注意です。 実行は1時間に1回までと書いてありますので、 5分おきにするとチェックがかかって、最悪アカウント停止でしょう。 わたしは下記のような感じで毎日1回の処理を流して います。 ================================================= CRONジョブの編集(xxxxx) 設定0 分 時 日 月 曜日 50    6 * * * <上記に実行時を指定> /virtual/xxxxx/public_html/php/cron_1.sh        <上記に実行したいものを指定> # 「分 時 日 月 曜日」で指定した時間に「/virtual/xxxxx/~」で指定したシェルスクリプト(/bin/sh)を実行します。 # ジョブの間隔は最短で1時間に1回とさせて頂いております。 ==================================================

noname#25821
質問者

補足

早速の回答ありがとうございました。 まずは質問内でのフルパス表示が間違ってました。 XREAですから/virtual/xxxxx/public_htmlがホームディレクトリになります。 本題ですが例えば1時間おきにジョブを実行させるには CRONジョブの編集画面で設定0の箇所は下記のように入力して 分   時   日   月  曜日 0   */1  *   *   * /virtual/xxxxx/(空欄)に***.plを入力して保存すればいいのですね? それと一番下の「シェルスクリプトの例」は空欄でよいですか?

関連するQ&A

  • レンタルサーバー(XREA)はTelnet接続できない?

    下記レンタルサーバーにてCGI設置を試みてますが、どうしてもTelnet接続ができません。WindowsXP(Pro)使用 http://www.xrea.com/ C:\>telnet www.s**.xrea.com(リターン)で下記メッセージにより接続失敗します。 接続中:www.s**.xrea.com...ホストへ接続できませんでした。ポート番号 23:接続に失敗しました。 他のサーバーでは接続成功してますので手法は間違いないと思います。 Q1:XREAはTelnet接続に対応してないのでしょうか? Q2:もしそうだとするとSSHによる接続が必要でしょうか?SSHの事は全くわかりません。 Tera Term Professional Version 4.20をダウンしたばかりで少し操作してみたところ「www.s**.xrea.comにログインしてます。認証が必要です」というメッセージがでます。 下記箇所は何を入力すればいいのでしょうか? ユーザー名(N): パスフレーズ(P): また、以下のラジオボタンで何を選択すればよいのでしょうか? ○プレインテキストを使う(L) ○RSA/DSA鍵を使う 秘密鍵(K) ○rhosts(SSH1)を使う ローカルのユーザー名(U): ホスト鍵(F): ○チャレンジレスポンス認証を使う(キーボードインタラクティブ)(C) telnet接続もしくはSSHはCGIの動作確認(***.plのコマンド実行)のみに使うだけです。

  • sshやtelnetでログイン後、シェル(bash, csh)プロンプトからコマンド実行する方法は?

    下記掲示板(CGI)の設置で至急、「sshもしくはtelnet」の情報が必要になりました。(メールによる掲示板への投稿機能で必要) http://www.megumi-island.net/cgi.html#bbs sshやtelnetでログイン後、シェル(bash, csh)プロンプトからコマンド実行する一番簡単な方法を教えてください。なお、当方OSはWindowsXP環境です。 シェルから下記コマンドを実行したいのです。 $ ./mi_mlpost.pl (と入力し、Enterキーを押す) これでとりあえず第一難関クリアです。 付属のmi_mlpost.txtによれば、まだcronの設定があるようですが・・・

  • CRONTAB設定で2日間隔記述方法を教えて下さい

    2日間隔でAM1:00に実行するようにCRONで設定したいのですが 下記記述でよろしいでしょうか? 気にしているポイントは、月末が29日、30日、31日と変わる 場合に、下記記述で対応できるかどうかです。 * 1 */2 * * /htdocs/sample/sample.pl 以下、参考にした情報です。 <cronの書式> 分(0-59) 時(1-24) 日(1-31) 月(1-12) 曜日(0-7,0=7=日曜日) コマンド <参考にした記述> 3時間おき、0~30分の間の10分おきに実行 0-30/10 */3 * * * /htdocs/sample/test.sh ご回答宜しくお願い致します。

  • crontabの設定ができない(編集画面が出ない)

    CentOS5.2を使っています。 crontabの設定を行おうと、 # chkconfig --list crond crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off で確認後、$ crontab -e  としましたが、 no crontab for aaabbb - using an empty one と出て、編集ファイルが表示されません。 $ crontab -l  とすると no crontab for aaabbb と出、 # crontab -l  も    no crontab for root  となります。   念のため # chmod 777 /etc/crontab としてみましたが、結果は同じです。 $ less /etc/crontab でファイルを開くと ------------------------ SHELL=/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 /etc/crontab (END) ---------------------- となっています。 Webで設定例を検索すると、no crontab for aaabbb - using an empty one の下に crontab: installing new crontab と出ると記載されているのですが、 私の場合、このような表示や動きは出ませんが、どのようにして crontab を設定していくのでしょうか。どうか宜しくお願いします。

  • crontabの設定について

    某サイトを参考にIPアドレスの自動アップデート スクリプトを作成しました。 OSはCentOS6.2です。 その後、crontab -e を実行(中は空で何も記入されていませんでした)しました。 本来vi /etc/crontab で編集するのかなと思ったのですが、以前使用していたvinelinuxのcrontabと表示形式が違っていたので、何も書き込んでいません。 crontab -e 実行後、下記内容を貼り付け保存しました。MAIL TO は空欄たったのですが、スクリプトが正常に実行されているかメールで受信したいため、下記設定をしました。すると確かにメールは10間隔で届くのですが、内容は下記エラーです。 エラー内容 /bin/bash: root: command not found crontab 設定内容 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO={ローカルドメイン内のメールアドレス記載} 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 # DDNS */10 * * * * root perl /usr/ddns/ipchk.pl 00 5 * * 0 root rm -f /usr/ddns/CRT_IP.dat スクリプトの内容は下記のとおりです。スクリプトの中にwgetコマンドがあるのですが、centos6.2ではwgetが最初から入っていました。念のためyum -y install wget を実行したところすでにインストール済みの表示が出ました。(command not found と言うエラーからwgetが実行されないのかな、と勝手に思った次第です) #!/usr/local/bin/perl (which perl 実行結果 /usr/local/bin/perl と表示がでたのでそれに従いました) # $CRT_IPF = '/usr/ddns/CRT_IP.dat'; $NEW_IPF = '/usr/ddns/NEW_IP.dat'; $LOG = '/var/log/ddns.log'; open INPUT,"$CRT_IPF"; $CRT_IP=<INPUT>; close INPUT; system("/usr/local/bin/wget -q -O $NEW_IPF {ここには REMOTE_ADDR:の結果が取得できる登録済みDDNSのアドレス記入}"); open(INPUT,$NEW_IPF); $c = <INPUT>; $stp = index($c,"REMOTE_ADDR:")+12; $edp = length($c); $NEW_IP = substr($c,$stp,($edp-$stp)); close(INPUT); if ($NEW_IP ne "" and $CRT_IP ne $NEW_IP) { open (OUTPUT ,">$CRT_IPF"); print OUTPUT $NEW_IP; close OUTPUT; print "IP Address update: $CRT_IP to $NEW_IP\n"; system("/usr/bin/wget -q -O - '{DDNSのIP更新サイトのアドレス記載 &ドメイン&pw=パスワード}'"); $now_string = localtime; open (OUTPUT ,">>$LOG"); print OUTPUT "$now_string DDNS IP Address Updated. $CRT_IP to $NEW_IP\n"; close OUTPUT; } 何がいけないのでしょうか。よろしくお願いします。

  • /etc/crontabに記述してあるのに一部のスクリプトの実行結果が通知されない

    RedHat9を使用しています。 # cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ 00,12,24,36,48 * * * * root run-parts /etc/cron/networkDown.cron 05 * * * * root run-parts /etc/cron/top_c.cron # ls -l /etc/cron/ drwxrwxr-x 2 root root 4096 1月 13 01:38 networkDown.cron/ drwxrwxr-x 2 root root 4096 11月 15 14:23 ntp.cron/ drwxrwxr-x 2 root root 4096 11月 26 14:24 top_c.cron/ # ls -l /etc/cron/networkDown.cron -rwxr-xr-x 1 root root 481 2月 28 2004 diskSpaceCheck.cron* -rwxr-xr-x 1 root root 2938 8月 5 15:33 networkDown.cron* -rwxr--r-- 1 root root 206 11月 30 23:56 popAccessCheck.cron* -rwxr--r-- 1 root root 543 1月 13 01:37 printSeverCheck.sh* となっていますが何故か/etc/cron/networkDown.cronディレクトリだけの実行結果がroot宛に通知されません。 /etc/cron/top_c.cronの実行結果はroot宛に通知されます。 # tail -f /var/log/cron には # crontab -l で表示される分のcronの処理結果しか吐かれないようです。 どうして、一部のディレクトリだけの実行結果が通知されないのでしょうか?

  • あるスクリプトでのCronDeamonの設定がうまくできません。

    現在Fedora Core 3で自宅サーバー構築をしています。 AuctionEXというスクリプトでcron.cgiの設定をするところがあるのですが、 /etc/cron.dailyにcron.shというシェルスクリプトをFedoraで直接作成して置いたのですが、動作していないようなのです。 cron.shの内容は以下のようにしました。 #!/bin/sh /usr/bin/perl /var/www/html/auction/cron.cgi exit パーミッションは755に設定しました。 今行き詰ってしまってどうすれば良いか全く検討がつきません。 どなたか教えていただけるととても助かります! 以下に、その設定に関してのREAD_MEファイルを載せます。 Cron Daemon の設定 cron.cgi の中の設定項目を設定して下さい。 ※フルパスを設定する項目がありますので、忘れずに設定して下さい。 お使いのサーバーにTELNET(SSH)等で接続して お好きな時間に"cron.cgi"を起動するように設定してください。 ("cron.cgi"の各項目を環境に合わせて編集してください。) (!)チェックポイント (1)オークションの時間終了した商品の出品者あてに、きちんと「終了通知」が送信されるかどうか? (2)再出品を設定した商品が、きちんと自動再出品されているかどうか? ※cron 設定はサーバ側で設定する必要があります。 ("cron.cgi"の中を編集しても起動するわけではありません。) ※設定方法は環境により異なりますので、ここでは省略させて頂きます。 ※レンタルサーバでも、サーバがcronをサポートしており、telnet接続が許可されていれば、設定は可能だと思います。

  • クライアントPCからSSHで接続できない。

    クライアントPCからTera Term(SSH)で接続しようとしています。 サーバー(Ubuntu 11.10)に下記のコマンドを実行したら「openssh-server」がインストールされていなかった。 dpkg -l | grep ssh 下記のように行いました。 1.下記のコマンドで「openssh-server」をインストールしました。 sudo apt-get install openssh-server 2.下記のコマンドでファイアウォールの設定をしました。 sudo ufw allow ssh 3.下記のコマンドでSSHの設定ファイルを開き、変更しました。 sudo vi /etc/ssh/sshd_config Prot 22 ListenAddress 0.0.0.0 Protocol 2,1 PermitRootLogin no 4.下記のコマンドでSSHを再起動しました。 sudo /etc/init.d/ssh restart 上記のように設定してクライアントPCからTera Term(SSH)で接続したら「SSH認証」画面が表示されたんで「ユーザ名」と「パスフレーズ」に入力して[OK]ボタンを押下したらTera Termの画面が閉じてしまいました。 再度、Tera Term(SSH)を起動して「新しい接続」画面の「ホスト」を選んで[OK]ボタンを押下したら下記のエラーメッセージが表示されました ・「接続が拒否されました」 お恥ずかしいんですが何がいけないのかがわかりません。 申し訳ありませんがご教授いただけませんでしょうか? 宜しくお願いします。

  • NT or Win2000 Server で crontab は?

    UNIX でおなじみの crontab デーモン は、 NT4 や Win2k ではどう設定するのでしょうか。 ( ありますよね??? ) できることなら、あるcgi が動いたら、それから何分後か にもうひとつ、任意の cgi が実行されてくれるような 設定ができれば願ったり叶ったりなのですが。。。

  • crontabのファイルのパス設定

    MacOSXを使っているUNIX超初心者です。 crontabのファイルのパス設定について質問です。 HDDが2台あって、コンソール上ではそれぞれ、 abcd123456:~ maruchan$ abcd123456:disk2 maruchan$ と表示されます(数字等は実際と変えていて、ユーザ名がmaruchanです)。 いつもは、コンソールからdisk2上のプログラムを直接動作させていまして、 abcd123456:disk2 maruchan$ /volumes/disk2/holder/program と打って、disk2/holder中のprogramを動作、その出力はdisk2/holderの中に書き込まれます。 コンソール上でいちいち打つ代わりに、crontabで行おうとして、disk2上にテキストファイルtest.crontabを作り、 00 12 * * * /volumes/disk2/holder/program と入れまして、下記を打ちました。 abcd123456:disk2 maruchan$ crontab test.crontab プログラムは指定時間に動作したのですが、出力が、 abcd123456:~ maruchan$ の中に書き込まれます。 出力は、disk2/holderに書かれるようにしたいのです。 原因はCronの環境設定が下記のデフォルトのままであることなのですが、test.crontab中にどのように環境設定記述をすれば良いのでしょうか? X-Cron-Env: <SHELL=/bin/sh> X-Cron-Env: <PATH=/usr/bin:/bin> X-Cron-Env: <LOGNAME=maruchan> X-Cron-Env: <USER=maruchan> X-Cron-Env: <HOME=/Users/maruchan> なお、 HOME=/volumes/disk2/holder 00 12 * * * /volumes/disk2/holder/program としてみたのですが、変更できませんでした。 どうぞよろしくお願いします。