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
Rootユーザーとして実行するためのcrontabを作成する代わりに、スクリプトを実行したいユーザー用のcrontabを作成します。あなたの場合、crontab -u www-data -e
はwww-dataユーザーのためのcrontabを編集します。フルコマンドをそこに入れて、それをrootユーザーのcrontabから削除するだけです。
編集:このメソッドは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
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
ユーザがそれらにアクセスできるように設定されるべきです。
別のユーザーとしてコマンドを実行するために(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
マイクの提案は「正しい方法」のように聞こえます。再起動時にvncserver
を実行するユーザーを指定しようとしていて、すべてのcronジョブを1か所にまとめたいというこのスレッドに出会いました。
VNCクーロンで次のようなエラーが表示されました。
vncserver: The USER environment variable is not set. E.g.:
私の場合は、Sudo
を使用してタスクを実行するユーザーを指定できました。
@reboot Sudo -u [someone] vncserver ...