現在のタイムスタンプを使用してSolarisでスクリプトを呼び出すにはどうすればよいですか?

現在のタイムスタンプを使用してSolarisでスクリプトを呼び出すにはどうすればよいですか?

リストエラーシェルスクリプトがありますが、毎日手動で実行します。crontabスクリプトを自動的に実行したいです。

私のスクリプト:

#!/bin/sh
ent programe -a$1 -b$2 -c$3 -d$4 -tTE -oListErrorTE.txt
grep " ERR1" ListErrorTE.txt
grep " ERR2" ListErrorTE.txt

説明する:

$1 = date start >> 20230914
$2 = time start >> 000100
$3 = date end >> 20230914
$5 = time end >> 163000

2時間前に開始するパラメータの日付/時刻を変更し、終了日/時刻を現在の日付/時刻に置き換えたいですか?

ベストアンサー1

スクリプトは、コマンドラインで開始日時と終了日時に対応する4つのパラメータを使用し、特定のパラメータを指定せずにスクリプトを呼び出そうとします。代わりに、開始日時を「2時間前」に、終了日時を「今」に設定しようとしています。

SolarisシステムにdateGNUがインストールされているとします(ユーティリティ上場公式のSolarisマニュアルにあるので、少なくとも管理者が提供できます)これを使用して、次の4つのパラメータの値を計算できます。

/some/path/yourscript \
    "$(date -d '2 hours ago' +%Y%m%d)" \
    "$(date -d '2 hours ago' +%H%M%S)" \
    "$(date +%Y%m%d)" \
    "$(date +%H%M%S)"

このコマンドが2023年9月14日09:44:03に実行された場合、スクリプトは4つのパラメータと20230914一緒07440320230914呼び出されます094403

4つのコマンド置換は、GNUを使用してdate必要な4つの日付とタイムスタンプを計算して返します。

心配している4つの呼び出しのうちのいくつかが秒、分、時間date、日などの異なる側面にある場合は、まず「今」というUnixタイムスタンプを取得し、そのタイムスタンプのオフセットを使用しdateて目的のタイムスタンプを取得します。日付と時刻のスタンプ:

now=$(date +%s)

offset=$(( -2*60*60 ))    # -2h in seconds

/some/path/yourscript \
    "$(date -d "@$(( now + offset ))" +%Y%m%d )" \
    "$(date -d "@$(( now + offset ))" +%H%M%S )" \
    "$(date -d "@$now" +%Y%m%d )" \
    "$(date -d "@$now" +%H%M%S )"

GNUはありませんが、dateかなり最新バージョンbash(バージョン4.2以降)があります。公式文書):

printf -v now '%(%s)T' -1

offset=$(( -2*60*60 ))    # -2h in seconds

/some/path/yourscript \
    "$( printf '%(%Y%m%d)T' "$(( now + offset ))" )" \
    "$( printf '%(%H%M%S)T' "$(( now + offset ))" )" \
    "$( printf '%(%Y%m%d)T' "$now" )" \
    "$( printf '%(%H%M%S)T' "$now" )"

これは、以前のコードスニペットと同様に、組み込みユーティリティprintfの特別な日付書式設定機能を使用します。bashまず、Unixタイムスタンプ「今」(シェル変数に保存now)を計算し、それを使用して「2時間前」オフセットを計算し、フォーマットされた日付とタイムスタンプをスクリプトの引数として出力します。

クローン操作の場合は、コードスニペットを取得して予約します。yourscript-runner非常に長いコマンドをcrontabファイルに直接挿入しようとするよりも、cronで予約されている別のスクリプトにコードを入れるのが最も合理的です。%部分的には、その文字はcron予約で特別でエスケープする必要があるためです。また、必要に応じてタスクを手動で実行できる別のスクリプトも提供します。

0 0 * * * /some/path/yourscript-runner

(上記のクローンスケジュールは深夜1日ごとに実行されます。)

おすすめ記事