/etc/cron.d/でシンボリックリンクを使用できますか?


25

特定のプロジェクトでsvnを介してcron構成を展開できるようにする構成メカニズムを実装しようとしています。

私はすぐに、/ etc / cron.d /からプロジェクトのcronファイル(vcsによって制御される)へのシンボリックリンクを作成する必要があると思いましたが、それは機能していないようです。

シンボリックリンクがサポートされていないことを示す古いフォーラムメッセージと、サポートしているというメッセージを見つけました。どっち?

これを達成するために他に何か他の良い方法はありますか?

回答:


27

による man crond

警告

すべてのcrontabファイルは、通常のファイルまたは通常のファイルへのシンボリックリンクである必要があり、所有者以外の実行可能ファイルまたは書き込み可能ファイルであってはなりません。この要件は、crondコマンドラインで-pオプションを使用して上書きできます。intifyサポートが使用されている場合、シンボリックリンクされたcrontabの変更は、cronデーモンによって自動的に通知されません。cronデーモンは、crontabをリロードするためにSIGHUPシグナルを受信する必要があります。これはinotify APIの制限です。

sendmailがインストールされていない場合、メールの代わりにsyslog出力が使用されます。

それはない場合は、しかし、シンボリックリンクを使用することができ、短いそうで、同様に私の生活のがらくたを悩ませregular files or symlinks to a regular file、それが使用しなければならない-pスイッチを。


1
また、cronがジョブを実行しているユーザーがファイルを所有している必要があることもわかります。たとえば、シンボリックリンク/etc/cron.d/bobsjobがユーザー「bob」が所有するファイルを指す場合、cronはsyslogメッセージで失敗しますWRONG FILE OWNER (/etc/cron.d/bobsjob)
クレイグリンガー

@CraigRinger「www-data」という名前のユーザーがcronファイルを所有していますが、現在、syslogでWRONG FILE OWNERエラーが発生しています。ユーザー「www-data」を使用してCronを実行するにはどうすればよいですか。rootにファイルを所有させたくありません。
CMCDragonkai 14年

@CMCDragonkai sudo -u www-data crontab -eとwww-dataユーザーのcrontabに追加します。その後、userとして実行されますwww-data。明示的なユーザー列は、ユーザーcrontabに存在しないため、必ず削除してください。
クレイグリンガー14年

それはファイルを内部に配置しますetc/cron.か?私はcrontabツールがタスクをどこか別の場所に配置するという印象を受けていました。
CMCDragonkai 14年

@CMCDragonkaiあなたは正しいcrontab -eです、この場合、電話はあなたが望むものではありません。私は探していますが、非rootユーザーとしてユーザーcrontabを実行する方法を見つけていません。
ACK_stoverflow

14

これはセキュリティに影響します。/etc/cron.d/内のスクリプトは、root権限でrootによって実行されます。システムがそのように侵害される可能性があるため、非rootユーザーが所有し、書き込み可能なスクリプトをそこにシンボリックリンクすることは悪い考えです。


4

Ubuntuのバージョンのcronマンページを確認します(このフォーラムでUbuntuについて話していると思います!)。

このディレクトリ内のファイルはルートが所有する必要があり、実行可能である必要はありません(/ etc / crontabのように構成ファイルです)。run-parts(8)で使用されるのと同じ命名規則に準拠する必要があります。大文字、小文字、数字、アンダースコア、ハイフンのみで構成されます。つまり、ドットを含めることはできません。

Florianが指摘しているように、このファイルが非rootユーザーによって書き込み可能な場合、ジョブはrootによって実行されるため、セキュリティホールになります(ファイル内でジョブの所有者として名前が付けられている人)。また、したがって、それに注意してください

このディレクトリには、/ etc / crontabで使用される形式に従ってタスクを定義するファイルを含めることができます。つまり、ユーザーcronスプールとは異なり、これらのファイルはタスク定義のようにタスクを実行するユーザー名を提供する必要があります。

すなわち、実行するコマンドの前にユーザー名をポップします。


1
つまり、ドットを含めることはできません。これに注意してください。リンク名にドットがありました。それは私のために私の非実行中の仕事の犯人でした。さらに、ファイル自体はCRLFで終わる必要があります
ジャンルイージゼーンザネッティニ博士
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.