Unix Shellスクリプトは、crontabを介して実行された後、それ自体のすべてのトレースを削除します。

Unix Shellスクリプトは、crontabを介して実行された後、それ自体のすべてのトレースを削除します。

私の質問は2つの部分で構成されています。両方の部分にご協力いただきありがとうございます。

提供された情報: - フォルダAとフォルダBという2つのフォルダがあるとします。 - フォルダAには多くのファイルが含まれています。 - フォルダBにはシェルスクリプト(code.sh)が含まれています。

パートA: スクリプトcode.shはフォルダAのすべてのファイルを削除し、スクリプトcode.shを含むフォルダBを削除する必要があります。

パートB: また、crontabを介して特定の時間に予約する必要がありますが、それ自体は問題ではありません。ただし、スクリプトがフォルダAの内容を削除した後は、パートAで説明されているように、crontabからそのエントリを削除してからフォルダBの削除に進む必要があります。

上記の内容は可能ですか?もしそうなら、誰かが私に方法を教えたり、少なくとも正しい方向を教えてもらえますか?私はUNIXを初めて使うので、助けてくれてありがとう。

メモ:全体のプロセス中に、crontabのスクリプト(code.sh)のみを手動でスケジュールできます。

答え1

このスクリプトがrootとして実行されている場合は、/var/spool/cron/rootからそのcrontab行を削除してcrontabからエントリを削除できます。 (これが何でcrontab -lあり、crontab -e何のために使用されるかです)。

削除コマンドの最後に次の行を追加します(スクリプト名を{pattern}に変更します)。

sed -i '/{pattern}/d' /var/spool/cron/root

したがって、crontabの実行を入力すると、code.sh良い

0 21 * * * /etc/cron.daily/code.sh

コマンドは次のとおりです。

sed -i '/code.sh/d' /var/spool/cron/root

これにより、ルートcrontabファイルから "code.sh"を含む行が削除されます。

上記の行をスクリプトの最後に追加して、両方のファイルを削除し、crontabからエントリを削除できます。 @Barmarが言ったように、2つのフォルダを一時的に削除できます。

はい、これは非常に古い質問ですが、削除に関する直接の質問です。予約されたこと具体的に答えが必要です。

答え2

スクリプトにファイルを削除する権限がある限り、問題はありません。 UNIXベースのシステムでは、スクリプトがソースファイルを変更または削除することに制限はありません。ファイルシステム構造は、すべてのプロセスがファイルを閉じたときにのみファイルに関連付けられている物理ストレージが解放されるように処理されます(削除後、ファイルはディレクトリ構造に表示されなくなりますが、ファイルを指すinodeはそのまま残ります)。プロセス)ファイルデータはそれにアクセスできます。誰もinodeを覚えていない場合にのみファイルが失われます。

もちろん、スクリプトを読んでいるインタプリタがファイルを閉じて再度開こうとする場合は例外です。強い打撃は問題になりません。

また、ワンタイム作業のように見えます。を使用しないでくださいcrontabatあるいは、sleep amount && ./scriptこれは通常これを行うための迅速で汚い方法です(ただし、コンピュータが再起動された場合や端末が閉じられても機能しません)。

関連情報