• ベストアンサー

シェルスクリプト

シェルスクリプトに関しては、まったくの初心者です。 OSは、SolarisとLinuxですが、シェルスクリプトを利用して下記のような自動実行プログラムを作りたいのですが、どなたかご教授下さい。 一台のWWWサーバのログ(例:access.log)を、1日に一回(出来ましたら朝の5時)に別サーバに送信するプログラムなのですがいかがでしょうか?このとき、出来れば送信先のファイル名は、送信した日付(例:20020222.log)にしたいです。説明不足かも知れませんが、ひとまずこれでお願いします。

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

  • ベストアンサー
  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.3

リモートマウントによる方法はGINOさんが回答されているのでftpでの方法を。 補足を読みましたがリモートログインの部分が疑問点だと思います。 ftpはリモートホストに接続したときにログインを試みます。 その時、(ローカル側の)ユーザのホームディレクトリに.netrcファイルが存在すると、その記述内容を参照してログインします。 .netrcの記述は machine リモートホスト名 login リモートアカウント password リモートパスワード です。 ただし、この方法は「テキストでパスワードを保持してしまう」という意味でセキュリティ的に問題を含みます。 ftp .netrcに定義がある状態ならスクリプトの定義は ftp リモートホスト名 << $ binary put $DATE.tar bye $ ("<<"はヒアドキュメントです。シェルによっては記述法が違うかもしれないのでご注意ください) リモートホストのログインディレクトにputされると思います。 参考URLはJMプロジェクトのftpとnetrcのmanページ日本語訳です。

参考URL:
http://www.linux.or.jp/JM/html/netkit/man1/ftp.1.html,http://www.linux.or.jp/JM/html/netkit/man5/netrc.5.html
DonChan777
質問者

補足

またまたありがとうございます。 わけがわからなくなってきました。 すみませんがもう一度最初から、お願いできますでしょうか? ちなみに、現在の仕様OSはSolarisです。 実行結果が 1Kg0224 ?Invalid command Not connected. ?Invalid command とでます。 DATE=`date +"%y%m%d"` cd access.log $DATE.log まずここで、ファイルはコピーされるのですが、020224というファイルが作成され、拡張子がありません。ls -alでみると、権限のところに .logr--r--と表示されています。 しかも削除しようとすると存在しませんと言われます。 tar cvf $DATE.tar $DATE.log これも、020224と作成され、.tar.r--r--と表示されます。多分上のLogのせいだと思うのですが...。 ftp -n << $ binary put $DATE.tar bye $

その他の回答 (2)

  • GINO
  • ベストアンサー率36% (18/50)
回答No.2

ファイル名を日付にするのはNo1の方が書いていらっしゃるので省略します。 別サーバに転送するなら、リモートマウントをすればどうでしょう? これだと別マシンのディスクを自分のマシンのディスクのように扱えます。 リモートマウントについては、マニュアルに書いてあると思うのでこれも省略です。NFSとかを参照してください。書くと長くなりますので。 あとNo1の方の補足ですが、cronの設定は、rootでログインしてcrontab -e シェルプログラムを実行するユーザ名です。

DonChan777
質問者

補足

ありがとうございます。早速ためさせていただきます。

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.1

転送先のファイル名は dst=`date +%Y%m%d` で変数dstに年(4桁)月(2桁)日(2桁)でセットされます。 時間指定で毎日実行するのはcronで出来ます。 crontabの指定は 0 5 * * * 実行するスクリプト でいいと思います。 あとは、転送方法がわかれば出来るんですけど…

DonChan777
質問者

補足

回答ありがとうございます。自動実行はおそらくOKなのですが、sh自体が...。? 転送方法ですが、なんでもいいです。 ただ、access.logがあるサーバからしか出すことができません。 #!/usr/bin/sh DATE=`date +"%y%m%d"` cp /etc/access.log /etc/$DATE.log tar cvf /etc/$DATE.tar /etc/$DATE.log ---------ここから下がよくわかりません(とりあえずftpで) ftp ホスト名 ????? binary put $DATE.tar by すみませんがよろしくお願いします。

関連するQ&A

  • シェルスクリプトで困っています 2

    度々申し訳ございません。 現在、Linuxマシン1からLinuxマシン2へTelnetでログインし、Linuxマシン2上にあるシェルスクリプト(/bin/sh)を実行し、Linuxマシン2上のプログラムを実行した後、Linuxマシン2からログアウトするシェルスクリプトを作成中です。 その、Linuxマシン2からログアウトする際に、 "exit"を記述しているのですが、その"exit"がTelnetログアウトの意味で実行されず、シェルスクリプトを終了するの意味で実行されていて困っています。 どなたか上手くTelnetからログアウトできるようにシェルスクリプトを組む方法をご存知ではないでしょうか?もし判りましたらご教授下さい。 よろしくお願い致します。

  • シェルスクリプトの実行

    一台目のLINUX上でプログラムを実行しLANでつながれたもう1台のLINUXにあるシェルスクリプトを実行するにはC言語でどのようにプログラミングをすれば可能でしょうか? プログラムと同じ場所ならsystem(コマンド)で出来るんですよね? telnetとか使いますか?それとももっと単純に出来るのでしょうか?

  • シェルスクリプトについて

    とあるUNIXサーバが1台あるとします。 でそのマシン上の管理プログラムが同一マシン上にある 「シェルスクリプト(bash)」をキックするとします。 となるとそのシェルスクリプトの実行者(?)は Unixにログオンしているユーザーになるのでしょうか?。 目的としてはそのログインしているユーザーの環境変数 をシェルから参照したいのですが・・ 考え方がWindowsなもので。。すみませんが よろしくお願いします。

  • Linux シェルスクリプトについての質問です

    Linux上で 日頃、簡単な シェルスクリプトを書き実行していますが、 この頃、より自動化をしたいと思い、シェルスクリプトの中に キーボードのキーを 押したかの様な動作をさせられないかを考えています。 やりたいことは、シェルスクリプトを実行すると、knoppix の partimage にてファイル等を 指定して、1行で実行は出来るのですが、続行するのは F5 キー を押したり Enter キーを押したりの作業が必要です。 この問題は、何か他ので対処が出来るのかもしれないですが、今後、どうしても キーをおさなきゃならない環境が来たときにも対処が出来るように シェルスクリプトでこのような事が可能なのかを知りたく質問させて頂きました。 どなたか分かれば回答を宜しくお願いします。

  • シェルスクリプトで実行したコマンドをタイムアウトさせる方法

    シェルスクリプト超初心者です。 ログファイルを『tail -f』で開き、その内容を一時的な テキストファイルにリダイレクトで書き出します。 その処理を、一定時間経過後に自動的に終了する。 といった内容のシェルスクリプトを作成したいと思っています。 しかし、「tail -f」を実行したプロセスを一定時間経過後に どういう風に終了させればよいのかよく分かりません。 実行したプロセスを一定時間経過後に終了させるような 方法が何かありませんか? ちなみに実行環境は、Solaris9です。 【コマンド例】 tail -f ./"ログファイル" > ./temp.txt かなり、初歩的な質問で申し訳ありませんが 宜しくお願いします。

  • シェルスクリプト

    Apache centos6.6 シェルスクリプトの質問です。 shファイルを作りたいです。 home/user/log の中にある access_logとerror_logをgzに圧縮したいです。 条件は1日前のログです。 圧縮した後gzのファイルしか残らないのですが、次のアクセスログとエラーログはちゃんと出力されますか? どうかお願いします

  • cronでシェルスクリプトが実行されない

    Linuxでファイルのバックアップを取るため backup.shというシェルスクリプトを組み、コマンドから実行する場合問題ないことを 確認しています。ところがcronに設定し自動実行すると内容が実行されておりません。 /var/log/cronを確認したところ時間通り実行されているというログは残っています。 /var/spool/cron/にrootというファイルを作成し 00 23 * * * /BACKUP/backup.shを実行させたいのです。 なぜ、手動の場合は問題がないのにcronで設定すると問題が生じるのでしょう? もし、お分かりの方は教えてください。 OSはRed Hat Linux release 8.0 (Psyche)です。

  • シェルスクリプトをローカルで動作させるには

    cronジョブが使えるレンタルサーバーを使用しており、cronジョブから起動するshスクリプトを作ろうと思っています。 そこでシェルスクリプトを簡単に書こうと思っているのですが、プログラムはphpしかわかりません。勉強するためにはローカルで実行できる環境が必要だと思っています。 ネットでよく調べてみたのですが、シェルスクリプトをローカルで動作させる方法がわかりません。コマンドプロンプトから実行できたりしないんでしょうか?

  • シェルスクリプトとphpを使ったプログラミングについて

    UNIXサーバで、現在、シェルスクリプトやphpを使ってプログラムを書いています。 今は「csh cmd ファイル名」という形でシェルスクリプトを実行しています。このままではプロンプト画面で味気ないので次のようにしたいのですが、やり方が分りません。 まず、phpやhtmlで作成したファイル提出画面にてファイルを提出してもらいます、そして、それを受け取ります。その時例えば送信ボタンを押すと思うのですが、そのボタンを押したらファイル名を受け取り「csh cmd ファイル名」が実行されるといふうにしたいのです。何かいい方法があれば教えて頂きたいです。phpでなくてもいいので、お願いします。

    • ベストアンサー
    • PHP
  • 他ユーザーのシェルスクリプト実行

    他ユーザーのシェルスクリプトを実行する際に「rsh」や「ssh」を使用しないで実行 する方法が知りたいです。 また、シェルはCのプログラムから実行させたいのでパスワードの入力を求められたり するのは避けたいです。 フルパスを直接指定すれば実行は出来ましたが、ユーザーが変わっていないので ほしい結果が得られませんでした。 OSはredhat linuxです。