質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Q&A

3回答

655閲覧

シェルスクリプト 改修可能かチェックお願いします

退会済みユーザー

退会済みユーザー

総合スコア0

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

0グッド

0クリップ

投稿2019/01/14 08:31

編集2022/01/12 10:55

下記2点を実装したくここで有識者の方にアドバイスいただき作成しました。
・30日以上前のログは圧縮、同時に別dirへコピー
・1年経過した圧縮logは削除
シェルスクリプト以外にも、プログラム系を全く書いた事がなく
findで探したものをxargsで引き渡すを理解するのがやっとです。
for文とかif文とか、変数代入などの組み合わせが難しいです。
crontabに時間指定を入れて動かすため、
echoでerrorと表示させるが出来ません。
もしも下記スクリプトが途中で止まった場合に、条件分岐させるとかは
このベースを崩さず、どこかに入れられるものでしょうか??

#!/bin/bash # ================================================ # 日々・毎年の日数を変数指定する # ================================================ for_daily_check=30 daily="+${for_daily_check}" for_years_check=365 yearly="+${for_years_check}" # ================================================ # logが生成される場所を変数指定する # ================================================ target_dir1="/var/log/XX" target_dir2="/var/log/XXX" # ================================================ # /var/log配下で、gz拡張子がついてない、作成日時30日以上前のfileを圧縮 # ================================================ find ${target_dir1} ! -name "*.gz" -mtime ${daily} | xargs -I {} sh -c 'gzip {} && cp {}.gz /var/backup/XX' find ${target_dir2} ! -name "*.gz" -mtime ${daily} | xargs -I {} sh -c 'gzip {} && cp {}.gz /var/backup/XXX' # ================================================ # サーバ上に保存されてるgip形式のfileは365日以降は削除する # ================================================ find ${target_dir1} -name "*.gz" -type f -mtime ${yearly} | xargs rm -f find ${target_dir2} -name "*.gz" -type f -mtime ${yearly} | xargs rm -f

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

投稿2019/01/14 08:41

編集2019/01/14 08:46
hichon

総合スコア5737

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

scsi

2019/01/14 09:10

あー、確かに
guest

0

echoでerrorと表示させるが出来ません。

エラーメッセージなどが出力された場合は、crontabのユーザー宛にメールが送られてきます。メールの本文にエラーメッセージが書かれています。

メールの環境を整えるのが無理な場合は、

crontab

10 0 * * * /path/to/script >/tmp/job.log 2>&1

とファイルに書けば、エラーメッセージを見る事が出来ます。

投稿2019/01/14 10:36

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

set -x と trap とか使えば崩さなくてもいけるかと。
エラー時にtrapが実行され、エラーをファイルに出力させたり、メールしたり
メールしない場合は、そのファイルの存在有無などを定期的に監視すればよい

他にもあると思いますが、調べて実装してみてください

投稿2019/01/14 08:42

scsi

総合スコア2840

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問