特定のユーザーとして実行されているcrontab


18

毎日スクリプトを実行する必要があります。スクリプトは、rootとしてではなく、特定のユーザー(例:user1)として実行する必要があります。そこで、/ etc / cron.dにcronファイルを配置し、行(2列目)にユーザー名を配置します。ただし、コマンドが見つからないというエラーが表示されます。スクリプトがuser1の環境として実行されていなかったと思われます。私は何か見落としてますか?


3
使用しているcrontabエントリを見せてください。
-user9517

回答:


32

/etc/crontabのファイルのみに/etc/cron.d/ユーザー名フィールドがあります。そのファイルでこれを行うことができます:

1 1 * * * username /path/to/your/script.sh

ルートのcrontabからsudo crontab -e次を使用できます。

1 1 * * * su username -c "/path/to/your/script.sh"

または、次のようにユーザーの実際のcrontabを使用できます。

sudo crontab -u username -e

crontabファイルの2番目の列は、ジョブを実行する時間です。6番目のフィールドを意味しましたか?


/etc/cron.d内のファイルは、ユーザー引数help.ubuntu.com/community/CronHowto#Advanced_Crontabを使用します。rootとして実行している場合に「sudo su」を実行するのはなぜですか?いずれの場合でも、問題の説明から、これはおそらくPATHの問題であるため、「su -l」でユーザーのログイン環境を使用する必要があります。
cjc

/etc/cron.dのファイルは/ etc / crontabの拡張子ではありませんか?システムでは、/ etc / cron.dのすべてのファイルにユーザー名を指定する必要があります。
user9517

ああ、確かに。 /etc/cron.d/ファイルはの一部です/etc/crontabsudoまた無意味です。その部分を削除します。
ラダダダダ

2
crontabにsudoを配置することについて:(a) sudo su...一般的に不要です。sudo -u <user> <command>通常は十分です。(b) TTYが接続されていない場合(cronで実行される場合など、一部のシステムではsudoが停止します。これは、sudoersファイルで修正できます。
タイラー

4

使用している実行可能ファイルが/ usr / local / binなどにある場合、そのユーザーのPATHを設定する必要があるかもしれません。PATHを設定するには、cronjobsの前に次のようなものを置きます。

PATH=/bin:/usr/bin:/usr/local/bin

*/5 * * * * user1 sample_executable

もう1つの方法は、cronjobでsample_executableへのパスを完全に指定することです。

*/5 * * * * user1 /path/to/sample_executable

sample_executableが標準PATHにない実行可能ファイルを参照する場合、最初のオプションを使用する必要があります。


1

ユーザーcrontabsの一般的なディレクトリは/ var / spool / cron / crontabsにあります。ファイル形式は、ユーザー名を含まない形式です。ユーザーcrontabはユーザーが所有し、モード0600のユーザーにちなんで命名されます。これは、タブファイルを記述し、crontab -u username filenameそのユーザーに必要なcronエントリをセットアップするために使用することで最適に処理されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.