web-dev-qa-db-ja.com

どのユーザーがスクリプトを実行するようにcrontabに指定するのですか?

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

私のサーバーはUbuntu上で動きます。
現在のcrontabの仕事は次のとおりです。

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

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

305
Mike

編集:このメソッドは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
44
Christian Nowak

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ユーザがそれらにアクセスできるように設定されるべきです。

14
pymkin

別のユーザーとしてコマンドを実行するために(rootとして)runuserを使用することもできます。

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

また見なさい:man runuser

9
Russell E Glaue

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

VNCクーロンで次のようなエラーが表示されました。

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

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

@reboot Sudo -u [someone] vncserver ...
8
Oliver Moran