特定のcronを強力に無効にします。{hourly、daily、weekly}スクリプト


25

私が管理しているさまざまなシステムには、よく使用される/etc/cron.{hourly,daily,weekly}レイアウトを介して実行されるcronスクリプトがあります。私が知りたいのは、一般的な「このスクリプトを無効にする」機能があるかどうかです。

明らかに、特定のディレクトリから何かを削除するだけで無効になりますが、より永続的な解決策を探しています。削除/etc/cron.daily/slocateするとupdatedb、ホームマシン(使用しないslocate)で毎晩無効になりますが、次回slocateパッケージをアップグレードすると、必ず表示されるようになります。

私が最も興味を持っている2つのディストリビューションはGentooとOpenSUSEですが、広く実装されたメカニズムがあることを期待しています。私が持っているディストリビューションは両方ともvixie-cronを使用しています(重要ではありません)。

回答:


45

chmod -x scriptnameスクリプトを無効にすることはできますが、ファイルはそのままにしておきます。


5
これは、パッケージ管理システムによって取り消される場合とされない場合があります。chattr +i scriptname後に行うことで、これをより堅牢にすることができchmodます。
mc0e

@ mc0eは不変ファイルについて教えてくれてありがとう、しかし誰かがかつて言ったように、それらは怖いです。自分がやったことを忘れてしまった場合、非常にイライラするトラブルにつながる可能性があります。
ジョナサンY.

2
@JonathanY .:それlsattrが目的です- 怖いものを取り除くためです(ファイルのアテビュートをリストします)。
追って通知があるまで一時停止します。

1
DWは確かですが、何かが不可解に間違った場合にファイル属性を調べることを知っている(ちょうど私がリンクしたスレッドのように)ここでの本当のキックです。
ジョナサンY.

@JonathanY。だからあなたは知っています。:-)いずれにせよ、私はそのリンクされたスレッドの「怖い」ビットは、パックマンのバグを指し考えて、自分自身をchattrはない
mc0e

9

run-partsは名前にドットが含まれるジョブを実行しないため、

mv /etc/cron.d/job /etc/cron.d/job.disabled

トリックを行います。


1
残念ながら、プログラムのアップグレード時に同じ問題が発生します。cronジョブが存在するかどうかを確認し、元の名前では存在しないため、再作成されます。
ジェニーDは、モニカ

2
プログラムをアップグレードするときに戻ってくるのは、使用中のパッケージツールの副作用であり、簡単な方法では修正できず、Cronのせいではありません。一部のパッケージシステムは以前のファイルを破棄して保存し、他のパッケージシステムは新旧を比較し、確認する変更がある場合にプロンプ​​トを表示します。とにかく、意図しない動作を引き起こす更新はイライラするはずですが、この時点でのUNIXシステム管理の日常的な部分です。あまりにも多くのパッケージが非常に速く移動しているため、個々の環境での影響についてすべての変更を定期的に確認できません。
ピールマン

Debianには、ファイルの流用という概念があります。つまり、パッケージマネージャーによって管理されている間に、ファイルの名前を効果的に変更できます。GentooやSUSEに同様のメカニズムが存在する可能性がありますか?
バス

9

通常、次のような行cron.dailyを介し/etc/crontabて 呼び出されます

run-parts --report /etc/cron.daily

man run-parts オプションを提供します。

run-parts --test /etc/cron.daily 実行せずに実行されるジョブを示します。

サブディレクトリを「無効」にして、ジョブをそこに移動することを好みます。

いずれにせよ、パッケージを更新する場合、ジョブが再び所定の場所に配置されるか、削除された「x」ビットが復元される可能性があります


1

使用しない場合は、slocateパッケージを削除できます。


それはほんの一例ですが、それでも良いアドバイスです、ありがとう。(何かがslocateに依存するかもしれないと思ったが、何も表示されません。)
ベニジ

slocateを削除し、代わりにmlocateをインストールします。ずっといい。
mc0e

1

cfengine(https://cfengine.com/)を使用する場合は、disableでこれを行うことができます。ホストのグループ用のプロミスファイルを記述するだけで、次のcfagentの実行時にそれ自体が適用されます。人形やシェフなどを使ってこれを行うことも非常に簡単です。


面白い。私は、構成管理ツールに非常に接線的にしか出会ったことがありません。一般的な「任意のUnixライクなシステムがあります」ソリューションを探していました。
ベニジ

1

/etc/cron.daily et。等 スクリプトは、run-partsと呼ばれるスクリプトによって実行されます。そのスクリプトは異なります。たとえば、上記の--testスイッチは、この時点で使用しているマシンにはありません。

Run-p​​artsはbashスクリプトです。これは、引数として指定されたディレクトリ内のすべてのスクリプトを実行するための一般的に便利なツールです。通常、/ usr / bin / run-partsにあります。

実行するものを決定するためのロジックが絡み合っています。そのコードはあなたの質問への答えを保持しますが、それもさまざまです。そのため、安全のためにコードを読む必要があります。

私が見ているバージョンでは、ディレクトリ<foo>で作業しているときに<foo> /jobs.denyをチェックするロジックがあります。それが存在する場合、そのファイルに記載されているスクリプトを1行で実行することを単独で拒否します。この機能を持っていると仮定すると、インストールするパッケージがインストールまたはアップグレードされたときに機能し続けるため、素晴らしいです。


0

RHELとその派生物(crontabsパッケージを提供する)を扱う場合、jobs.denyファイルに名前を入力することにより、ジョブを明示的に無効にすることができます。

以下からのcrontabファイル/実行-部品のmanページ

ファイルの実行は、他の許可/拒否設定ファイルと同様に機能するファイルjobs.allowまたはjobs.denyを作成することで許可または拒否できます。ファイルは指定されたディレクトリに作成する必要があります。

/etc/cron.daily/jobs.denyには、このスクリプトの実行を禁止する0logwatchなどを含めることができます。


-1

ユーザーcrontabも必要ない場合は、サービスリストでcrondを無効にしてください。

DebianおよびDebianベースのバージョンでは、これは適切な/etc/rcX.d(ランレベルX用)からシンボリックリンクを削除するだけの問題です。

SUSEまたはGentooでサービスをどのように処理するかわかりません。


4
それは悪い考えです。cronをすべて無効にすると、logrotate、updatedb、無人アップグレード、標準バックアップなどの便利なメンテナンスタスクが無効になります。
東武

Updatedbは、まさに無効にしようとしているタスクです(slocateのdbを更新します)。それにもかかわらず、はい、一般的に悪いアドバイス。
ベニジ

あ、ごめんなさい。私はあなたの質問を読み違えて、特定の単一のcronジョブではなく、すべてのシステム固有のcronジョブを無効にしたいと考えました。
-jishi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.