- ベストアンサー
シェルスクリプト
シェルスクリプトに関しては、まったくの初心者です。 OSは、SolarisとLinuxですが、シェルスクリプトを利用して下記のような自動実行プログラムを作りたいのですが、どなたかご教授下さい。 一台のWWWサーバのログ(例:access.log)を、1日に一回(出来ましたら朝の5時)に別サーバに送信するプログラムなのですがいかがでしょうか?このとき、出来れば送信先のファイル名は、送信した日付(例:20020222.log)にしたいです。説明不足かも知れませんが、ひとまずこれでお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
リモートマウントによる方法はGINOさんが回答されているのでftpでの方法を。 補足を読みましたがリモートログインの部分が疑問点だと思います。 ftpはリモートホストに接続したときにログインを試みます。 その時、(ローカル側の)ユーザのホームディレクトリに.netrcファイルが存在すると、その記述内容を参照してログインします。 .netrcの記述は machine リモートホスト名 login リモートアカウント password リモートパスワード です。 ただし、この方法は「テキストでパスワードを保持してしまう」という意味でセキュリティ的に問題を含みます。 ftp .netrcに定義がある状態ならスクリプトの定義は ftp リモートホスト名 << $ binary put $DATE.tar bye $ ("<<"はヒアドキュメントです。シェルによっては記述法が違うかもしれないのでご注意ください) リモートホストのログインディレクトにputされると思います。 参考URLはJMプロジェクトのftpとnetrcのmanページ日本語訳です。
その他の回答 (2)
- GINO
- ベストアンサー率36% (18/50)
ファイル名を日付にするのはNo1の方が書いていらっしゃるので省略します。 別サーバに転送するなら、リモートマウントをすればどうでしょう? これだと別マシンのディスクを自分のマシンのディスクのように扱えます。 リモートマウントについては、マニュアルに書いてあると思うのでこれも省略です。NFSとかを参照してください。書くと長くなりますので。 あとNo1の方の補足ですが、cronの設定は、rootでログインしてcrontab -e シェルプログラムを実行するユーザ名です。
補足
ありがとうございます。早速ためさせていただきます。
- toysmith
- ベストアンサー率37% (570/1525)
転送先のファイル名は dst=`date +%Y%m%d` で変数dstに年(4桁)月(2桁)日(2桁)でセットされます。 時間指定で毎日実行するのはcronで出来ます。 crontabの指定は 0 5 * * * 実行するスクリプト でいいと思います。 あとは、転送方法がわかれば出来るんですけど…
補足
回答ありがとうございます。自動実行はおそらく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 すみませんがよろしくお願いします。
補足
またまたありがとうございます。 わけがわからなくなってきました。 すみませんがもう一度最初から、お願いできますでしょうか? ちなみに、現在の仕様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 $