cdコマンドを含むシェルスクリプトを使用してcrontabでsourceコマンドが機能しないのはなぜですか?

cdコマンドを含むシェルスクリプトを使用してcrontabでsourceコマンドが機能しないのはなぜですか?

というスクリプトを作成しましたpurging.sh。私はこのスクリプトでコマンドを使用しており、スクリプトはディレクトリをcd数回変更するので、cdコマンドにいくつかの変数を割り当ててディレクトリを変更するのに役立ちます。

cd /home/parthipan/test/wireshark/$a/$b

source ./purging.shスクリプトを実行するには、またはを使用する必要があります. ./purging.sh

ただし、crontabを使用するスクリプトをクリーンアップする必要があります。

10 01 * * * . /home/parthipan/test/purging.sh

私のスクリプトを始める:

#!/bin/bash
a=$( date -d "`date` -60 days" "+%Y%m%d" | cut -b 1-4 )
b=$( date -d "`date` -60 days" "+%Y%m%d" | cut -b 5-6 )
c=$( date -d "`date` -60 days" "+%Y%m%d" | cut -b 7-8 )
cd /home/parthipan/test/wireshark/$a/$b
d=$( ll | awk -F " " '{print $9}' | awk -v value=$c '$1 < value' | sed "/^$/d" | xargs )
echo "The Days archiving are: $d"
e=$( ll | awk -F " " '{print $9}' | awk -v value=$c '$1 < value' | sed "/^$/d" | wc -l )
f=$( date -d "`date` - 61 days" "+%Y%m%d" | cut -b 5-8 )
if (( $e > 0 ))
        then
                tar --no-overwrite-dir -czvf backup_$f.tar.gz $d
                mv backup_$f.tar.gz /home/parthipan/test/logs_backup
                #rm -rf $d
                logger Data has been purged

上記のスクリプトは引き続き実行され、コマンドは終了しますfi。通常、cliでは機能しますが、crontabでは機能しません。メッセージが印刷されるように、最後の行にloggerコマンドを使用しました/var/log
ただし、メッセージの印刷は次のとおりです。

May  1 00:50:01 parthipan-nadar systemd: Started Session 24 of user root.

それ以降は他の形式のロギングはありません。しかし、必要なログはData has been purged

ベストアンサー1

llスクリプトでエイリアスを使用しているように見えるため、シェルからインポートすると機能します。 cronで実行されるスクリプトにはユーザー環境がないため、特定のエイリアスや環境変数に依存するのではなく、明示的に設定する必要があります(外部または外部の実行可能ファイルをPATH呼び出す場合)。エイリアスがのエイリアスの場合は、そのエイリアスを代わりに使用してください(下記の項目1を参照)。/bin/usr/binllls -lls -l

その他のコメント:

  • lsを解析しないでください。期間に基づいてファイルをフィルタリングする必要がある場合は、またはstatを使用してくださいfind

  • 日付呼び出し内に日付呼び出しを入れ子にする必要はありません。-d "60 days ago"

  • ただ、年、月、日を得るためにdateを6回(!!)呼び出さないでください。

    read -r year month day < <(date -d "60 days ago" "+%Y %m %d")
    
  • 説明的な変数名を使用してください。a b c...非常に悪い。

おすすめ記事