Komut dosyasını hangi kullanıcı tarafından çalıştırılacağını crontab'da nasıl belirleyebilirim? [kapalı]


176

Kök altında çalışan birkaç crontab işim var, ama bu bana bazı sorunlar veriyor. Örneğin, o cron işi sırasında oluşturulan tüm klasörler kullanıcı kökü ve grup kökü altındadır. Web sitemden komut dosyaları çalıştırdığımda bu klasörleri ve dosyaları işleyebilmem için kullanıcı www-data ve grup www-data altında çalışmasını nasıl sağlayabilirim?

Sunucum Ubuntu üzerinde çalışıyor.
Geçerli crontab işi:

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

Yanıtlar:


335

Kök kullanıcı olarak çalıştırılacak bir crontab oluşturmak yerine, komut dosyasını çalıştırmak istediğiniz kullanıcı için bir crontab oluşturun. Sizin durumunuzda, crontab -u www-data -ewww-data kullanıcısı için crontab düzenleyecektir. Tam komutunuzu oraya koyun ve kök kullanıcının crontab'ından kaldırın.


54
crontab -eBelirli bir kullanıcı olarak kullandığınızda aynı şekilde çalışır .
kulak

7
Ancak bu crontab sistem başlangıcında mı yoksa yalnızca kullanıcı oturum açtığında mı kontrol edilecek?
Bruno Finger

11
cronon * nix systems, belirli bir kullanıcının crontab'ında belirtilen işleri çalıştırmak için kullanıcının oturum açmasını gerektirmez.
Mike

2
Bu aynı zamanda grup kimliğini OP'nin istediği gibi ayarlayacak mı? Birinin istediği grup kullanıcının birincil grubundan farklıysa ne olur?
15:15

49

EDIT: Bu yöntemin crontab -e ile çalışmaz, ancak / etc / crontab doğrudan düzenlerseniz çalışır. Aksi takdirde, aşağıdaki gibi bir hata alabilirsiniz:/bin/sh: www-data: command not found

Program adından hemen önce:

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

Bu apache kullanıcı cadı www-veri doğru olarak çalışmasını sağlayacaktır?
arma

19
Bu yöntemin işe yaramayacağını crontab -e, ancak yalnızca /etc/crontabdoğrudan düzenleme yaptığınızda işe yarayacağını unutmayın . Daha fazla bilgi için bu dosyanın üst kısmındaki yorumu okuyun.
imgx64

5
Kullanıcı sadece sistem crontab'da belirtilebilir
James Roth

Sistem crontab üzerinde zamanlanmış birkaç iş var. Yaptığımda sudo crontab -eişleri görüyorum. Ama dosyayı açıyorum /etc/crontabiş yok. Bu garip mi? Ayrıca ben sudo crontab -eve belirtilen kullanıcı ile bir iş eklerseniz, işe yarar mı?
eNeMetcH

14

Ubuntu'yu çalıştırdığınız için sistem crontab'ınız adresindedir /etc/crontab.

Kök kullanıcı olarak (veya sudo kullanarak), bu dosyayı düzenleyebilir ve bu komutu çalıştırması gereken kullanıcıyı belirtebilirsiniz. Sistem crontab'daki girişlerin biçimi ve komutunuzu nasıl girmeniz gerektiği aşağıda açıklanmıştır:

# 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

Tabii ki php betiğinizin ve günlük dosyanızın izinleri, www-datakullanıcının bunlara erişebilmesi için ayarlanmalıdır .


Bunun buna eşdeğer olması gerektiğini düşündüm crontab -e; Ama değil.
14'te 0

5
Ubuntu dokümanları güncellemeler tarafından üzerine yazılabileceği için / etc / crontab'ı düzenlememenizi tavsiye etti. crontab -e, / var / spool / cron / crontabs içinde kullanıcıya özgü bir cron dosyası oluşturur.
Hemm

9

runuserKomutu farklı bir kullanıcı olarak çalıştırmak için (root olarak) kullanmayı da deneyebilirsiniz

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

Ayrıca bakınız: man runuser


runuserUbuntu'ya dahil değildir.
Raptor

1
runuser Ubuntu'nun en son sürümünde. Bu cevapta tartışıldığı gibi koşucuya alternatifler de vardır unix.stackexchange.com/questions/169441/ubuntu-runuser-command , örneğin su ve sudo.
Russell E Glaue

8

Mike'ın önerisi "doğru yol" gibi geliyor. Kullanıcı vncserveryeniden başlatma altında çalıştırmak belirtmek isteyen bu iş parçacığı geldi ve tüm cron işlerimi tek bir yerde tutmak istedim.

VNC cronu için aşağıdaki hatayı alıyordum:

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

Benim durumumda, sudogörevi kimin çalıştıracağını belirtmek için kullanabildim .

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

1
Bu mesajı günlüklerde aldım:sudo: sorry, you must have a tty to run sudo
Renato Gama

@renatoargh Muhtemelen RedHat üzerinde çalışıyorsunuz. Unix.SE'deki bu cevaba bir göz atın.
kaiser
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.