• 締切済み

シェルスクリプト

はじめまして。 当方も現在調べてはいるのですが、難航していますので、ご質問させて下さい。 OS redhat es 3 DB DB2 8.1 【やりたい事】 手動でDBのアーカイブログを削除するのが大変ですので、自動で削除するスクリプトを作りたい。 【不明な点】 アーカイブログの保管場所の変更を考慮して、スクリプト上でコマンドを使用しログパスを確認しつつ、アーカイブログを削除したいのですが、スクリプトの記述の仕方に一部不明点があります。 下記 get db cfg for sample | grep LOG を実行 Path to log files = /home/test1/test1/NODE0000/SQL00001/SQLOGDIR/ (例えば)が帰ってくる。 この/home/test1/test1/NODE0000/SQL00001/SQLOGDIR/  がインスタンスによっては近い将来変動してきそうです。ですが、スクリプトのメンテまで行うとなると、結局手動削除とあまり手間は変わりそうにないので、ログの格納先が変わっても自動でパスを拾ってきて、削除するように作りたいのです。 当方も知識不足に加え、現在少々錯綜している状況で旨く質問できずに恐縮です。 たとえ話、逆に質問したいと言う形でも結構ですので、知恵を貸して頂けまないでしょうか? 宜しくお願いします。

みんなの回答

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

get db cfg for sample | grep LOG | sed -s 's/.* \= \(.*\)$/\1/' で拾えませんか? LOGDIR=`get db cfg for sample | grep LOG | sed -s 's/.* \= \(.*\)$/\1/'` でシェル変数に取り込めるかと。

関連するQ&A

  • シェルスクリプトの書き方

    お忙しい所失礼します。 以下の内容のようなことを行うにはどうすればいいでしょうか? (例) /home/testフォルダ直下に以下の3つのフォルダがあります。 ・sampleフォルダ ・sample1111フォルダ ・sample2222フォルダ このファイルをそれぞれ別のディレクトリに移動させます。 ・sampleフォルダ→/usr/testフォルダに移動 ・sample1111フォルダ→/usr/test1111フォルダに移動 ・sample2222フォルダ→/usr/test2222フォルダに移動 これが通常なのですが、sample1111と2222が無いときはコピーを実行しないスクリプトを書きたいのですがどう書けばいいのでしょうか? 手動でやる分には楽なんですけど、100個位フォルダがあり…日によって50の時もあれば100の時もあって…自動化したいのです… もし参考になるサイトなどあれば教えてください。 よろしくお願い致します。

  • Linuxでシェルスクリプトがフルパスだと実行できない

    Linuxでシェルスクリプトがフルパスだと実行できない こんにちは 現在linuxでシェルスクリプトを記載していて、やっと出来た!と思ったら、なぜかフルパスで実行すると失敗します。 中身は例えば #!bin/sh echo "hello" とし、ファイル名をtest.shとします。 実行時にカレントからだと上手くいきます。 ./test.sh ただし、フルパスで実行するとうまくいきません。 ./home/user/test.sh エラーは以下 bash: ./home/dv3/tet.sh:No such file or directory 所有者はrootでグループもrootにしてあります。 シェルの権限は755にして、rootで実行しています。 なぜカレントだと上手くいき、フルパスだと上手くいかないのでしょうか? パスが必要なコマンドも入っていないのに。。。 どなたかご教授いただけると幸いです。 宜しくお願い致します。

  • 質問!!もう一回です。(シェルスクリプト)

    次のようなLOGファイルがあるとします。 日付   時間  区分    番号 08/03/06 21:11 RECV "6105.2280 08/03/06 21:11 CALL "6.6105.2280" 08/07/06 20:35 RECV "6.6105.2280" 08/07/06 20:35 CALL "6105.2280" 08/07/06 20:37 RECV "+81.6.6105.2280 08/08/06 13:52 SEND "47963212" そこで、「08/07/06」を引数で受けたら、06年8月7日以前の履歴が削除されるように作りたいです。 例えば、スクリプト名が「test」とすると、「$ test 08\/07\/06」になりますか。。。 これで、LOGファイルの中身は 「08/08/06 13:52 SEND "47963212"」だけが残ります。 よろしくお願いします。

  • cshで下記のシェルスクリプトを作ろうとしています。

    cshで下記のシェルスクリプトを作ろうとしています。 スクリプト作成初心者なため質問させてください。 /home/log/FILEA.log(このファイルはある方法で他サーバーのdf -k /dataの出力結果を1分ごとにコピーしています。 Filesystem kbytes used avail capacity Mounted on ebisu:/shares/product/data 767922632 680047616 87875016 89% /data FILEA.logを読み込んで、Mounted が90%以上であった場合に、 /home/nakam-te/volumuというGUIファイルを実行して表示させたいと思っています。 whileやreadを使用して作ればよいのではと思いますが、初めてのスクリプトなので 記述方法がわからなくて困っています。 アドバイスをいただければ幸いです。 よろしくお願いします。

  • cronでのPerlスクリプト実行

    少し前に同様の質問をしましたが、やはり解決していませんでした。 #!/usr/bin/perl open(OUT,">/home/test/test.log"); print OUT "OK"; close(OUT); このスクリプトをcrontabに以下のように記述しました。 0 0 * * * /home/test/test.pl > /dev/null 2>&1 パーミッションは省略します。 このようにすると、正常にtest.logが出力されました。 しかし、本当に実行したいスクリプトを同様にしたところ、 正常に動作しませんでした。cronログには記録されます。 実際のスクリプトは長いのでここには掲載できませんが、 主な処理はおおよそ次のようなことをしています。 ・pmとplモジュールがあり、plからpmを呼び出している。 ・plもpmも自作のユーザ関数の組み合わせ ・ファイルはtestユーザが所有し、実行権限は777。  (動作確認後、徐々に落としていきます) ・plでは、use encoding 'utf8'。 ・スクリプトにオプションを付けて、引数を読み込む。 ・loggerでsyslogへ結果を出力。 ・子プロセスを生成して処理の一端を行わせている。 ・opendir、readdirなどを使用。 ・xxxxxx.datファイルを読み書きしている。 ・CPANにあったメール送受信モジュールを使用している。 ・ファイルをbz2圧縮している。 などです。 コマンドラインから実行すると確実に正常に動作します。 気になるのはPerlスクリプトの内容でモジュールを使うときは、 パスが通っていてもフルパス指定しないといけないのでしょうか? しかし、フルパスと言ってもせいぜいsystem()で実行するコマンドを フルパスにするくらいしか思いつきません。 うまく実行できない理由として考えられる可能性があることを 教えてもらえませんか? 根本的な解決としては、cronでの実行とコマンドラインからの実行は 何が違うのかが明確になれば対処できるのかもしれません。 よろしくお願いします。

  • 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)です。

  • Redhat9にあるシェルスクリプトをWinXPのアプリから実行させる方法

    サーバ:Redhat9(ファイル[smb],DB[postgres]サーバ) クライアント:WinXPorWin2000 Redhat9でDBの一括処理をシェルスクリプトで作成しました。 自動処理はcrontabなどで行っていますが、手動処理も行いたいと思います (DBだけではなく、いろいろ活用する予定です) クライアントはVC6.0で作成されたアプリが動作しています。 (要はクライアントサーバシステムです) クライアントのアプリからボタンクリックでRedhatのシェルスクリプトを実行するよい方法はありますか? 現在案として (1)Redhatでシェルスクリプトを作成する (2)Windowsでrshコマンドを使用しシェルスクリプトを実行するバッチファイルを作成する (3)クライアントのアプリからバッチファイルを実行する という方法を考えていましたが、 rshのPermission deniedの問題で先に進めません。(この件は別スレッドで質問済みです) 何か良い案をご教授頂けますでしょうか? よろしくお願いします

  • シェルスクリプト trap処理の流れにつきまして

    シェルスクリプト作成しておりますが、 trap処理について質問がありますので、ご教授お願い致します。 以下、テストしたいと思っているスクリプトを記載いたします。 #!/bin/sh trap "echo 'stopped'" 1 2 3 15 echo start > test1.txt sleep 100 echo end > test1.txt 上記スクリプトを実行し、Ctrl+cもしくは、 kill -15 でスクリプトを削除した場合、 sleep中にスクリプト中断していると思うのですが、 end文字列がtest1.txtに書き込まれてしまいます。 trapが処理される流れというのは、どのような流れなのでしょうか。 また途中で中断しているのであれば、途中で以下処理を 行なわないようにするにはどうすればよろしいでしょうか。 宜しくお願いいたします。

  • テーブルバックアップ時にエラー

    お世話になります。 SQL Server2008 Standard Scriptを実行し手動でAAAテーブルをバックアップしております。 ※バックアップ用テーブルがあり、その全レコードを削除し  AAAテーブルの内容をコピーしてます。 基本的には問題なくバックアップ出来ているのですが、たまに エラーになるときがあります。 エラーになったときのSQLログに、  「'DB名' のファイル 'DB名_log' の自動拡張をユーザーが取り消したか、  xxxミリ秒でタイムアウトしました。ALTER DATABASE を使用して、  このファイルの FILEGROWTH の値の設定を小さくするか、または  新しいファイル サイズを明示的に設定してください。」 と出ます。 上記メッセージで調べると、トランザクションログの何たら・・・ とありますが、エラーだったとしても、数分後に実行すると 問題無かったりします。 なので、トランザクションログサイズの拡張?とかは関係が 無いように思えるのですが。。 どのようなことが考えられますでしょうか。 ご教示の程、宜しくお願い致します。

  • シェルスクリプト ファイルパス違いによって実行結果が違う 比較

    シェルスクリプト(bシェル)を作成しています。fileA.txtの中身を一行ずつ読み込んで、fileB.txtと比較を行うプログラム(sample.sh)です。 設定しているファイルのパスの違いによって実行が出来るものと出来ないものがあり、その原因がわかりません。 【1】自分のホームディレクトリ(MyDIR)にすべてのファイルを置いている FILEA=/home/MyDIR/TEST/fileA.txt FILEB=/home/MyDIR/TEST/fileB.txt while read line do grep -v "$line" "$FILEB" done < $FILEA  このプログラムは正常に実行できます 【2】FILEA,Bを/tmpの下に作ったTESTディレクトリの下に置いている sample.shは/home/MyDIR/TESTの下、fileA,Bは/tmp/TESTの下。 set FILEA=/tmp/TEST/fileA.txt set FILEB=/tmp/TEST/fileB.txt while read line do grep -v "$line" "$FILEB" done < $FILEA  ファイルのパスをこのように変更すると、while:構文が間違っています。というエラーが出て実行できません。whileの中に入れていないようです。スペルミスはありませんし、パスが違うだけでなぜ実行が出来なくなるのでしょうか? よろしくお願いします。