スクリプトを実行するユーザーごとにcrontabで指定する方法は?[閉まっている]


176

rootで実行するcrontabジョブはほとんどありませんが、いくつか問題があります。たとえば、そのcronジョブのプロセスで作成されたすべてのフォルダーは、ユーザーrootおよびグループrootの下にあります。ユーザーwww-dataとグループwww-dataで実行するようにするにはどうすればよいですか?Webサイトからスクリプトを実行するときに、これらのフォルダーとファイルを操作できますか?

私のサーバーはUbuntuで実行されています。
現在のcrontabジョブは次のとおりです。

*/1 * * * * php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1

回答:


335

rootユーザーとして実行するcrontabを作成する代わりに、スクリプトを実行するユーザーのcrontabを作成します。あなたのケースでcrontab -u www-data -eは、www-dataユーザーのcrontabを編集します。完全なコマンドをそこに入れて、rootユーザーのcrontabから削除してください。


54
crontab -e特定のユーザーとして使用する場合も同様に機能します。
kulak 14

7
しかし、このcrontabはシステムの起動時、またはユーザーがログインしたときにのみチェックされますか?
Bruno Finger

11
cron* nixシステムでは、特定のユーザーのcrontabで指定されたジョブを実行するためにユーザーがログインする必要はありません。
マイク

2
これにより、OPが要求したとおりにグループIDも設定されますか?必要なグループがユーザーのプライマリグループと異なる場合はどうなりますか?
askyle 2015年

49

編集:この方法はcrontab -eでは機能せず、/ etc / crontabを直接編集した場合にのみ機能することに注意してください。そうしないと、次のようなエラーが発生する可能性があります/bin/sh: www-data: command not found

プログラム名の直前:

*/1 * * * * www-data php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1

これは、Apacheユーザーの魔女がwww-dataとして実行できるようにするのでしょうか。
arma

19
このメソッドはでは機能せずcrontab -e/etc/crontab直接編集した場合にのみ機能することに注意してください。詳細については、このファイルの上部にあるコメントを参照してください。
imgx64 2013年

5
ユーザーはシステムのcrontabでのみ指定できます
James Roth

システムのcrontabにいくつかのジョブがスケジュールどおりにあります。私がそうするときsudo crontab -e、私は仕事を見ます。しかし、私/etc/crontabはジョブがないファイルを開きます。これは変ですか?またsudo crontab -e、ユーザーを指定してジョブを追加した場合、それは機能しますか?
eNeMetcH 2016年

14

Ubuntuを実行しているため、システムのcrontabはにあり/etc/crontabます。

rootユーザーとして(またはsudoを使用して)、このファイルを編集し、このコマンドを実行するユーザーを指定できます。システムcrontabのエントリの形式と、コマンドの入力方法は次のとおりです。

# m h dom mon dow user  command
*/1 * * * * www-data php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1

もちろん、phpスクリプトとログファイルの権限は、www-dataユーザーがアクセスできるように設定する必要があります。


私はこれは同等にすべきだと思っcrontab -eた。だがしかし。
2014

5
Ubuntuのドキュメントでは、更新によって上書きされる可能性があるため、/ etc / crontabを編集しないことを推奨しています。crontab -eは、ユーザー固有のcronファイルを/ var / spool / cron / crontabsに作成します。
Hemm

9

runuser(ルートとして)を使用して別のユーザーとしてコマンドを実行することもできます

*/1 * * * * runuser php5 \
            --command="/var/www/web/includes/crontab/queue_process.php \
                       >> /var/www/web/includes/crontab/queue.log 2>&1"

以下も参照してください。 man runuser


runuserUbuntuには含まれていません。
Raptor

1
runuserはUbuntuの最新バージョンです。この回答unix.stackexchange.com/questions/169441/ubuntu-runuser-command、たとえばsuやsudoで説明されているように、runuserに代わるものもあります。
Russell E Glaue 16

8

マイクの提案は「正しい方法」のように聞こえます。vncserver再起動時に実行するユーザーを指定する必要があるこのスレッドに出くわし、すべてのcronジョブを1か所に保持したいと考えました。

VNC cronで次のエラーが発生しました。

vncserver: The USER environment variable is not set. E.g.:

私の場合、sudoタスクを実行するユーザーを指定するために使用できました。

@reboot sudo -u [someone] vncserver ...

1
ログに次のメッセージが表示されました:sudo: sorry, you must have a tty to run sudo
Renato Gama

@renatoarghおそらくRedHatで実行しています。Unix.SE でこの回答を見てください。
カイザー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.