Kullanıcı olarak crontab nasıl çalıştırılır: www-data?


32

LAMP'um çalışacak şekilde ayarlandı user:www-datave tüm dosya ve klasörler bu izinlerle oluşturuldu.

Crontab için user @ ubuntu olarak ayarlarım var.

Bu yüzden crontab -ebu komutu yapıyorum ve kullanıyorum:

*/5 * * * * php /var/www/public/voto_m/artisan top >/dev/null 2>&1

Temel olarak, bu komut yalnızca belirtilen yerde önbellek dosyası oluşturur (bununla ilgili bir sorun yoktur), ancak bu önbellek dosyası kullanıcıyla oluşturulur: kullanıcı izinleri izin verilmez user:www-data.

Varsayılan olarak user:www-dataizinleri olan bir dosya oluşturmasını nasıl sağlayabilirim ?
Gidemem ve chownher seferinde dosya yeniden oluşturulur.

Teşekkürler.


Www-data olarak çalışan bazı crontab betiklerinin (örneğin awstats, veya php5sessionclean için) /etc/cron.*dizinlerde bulunduğunu ve bu nedenle görünmeyeceklerini crontab -e(kullanıcı www-verileri belirtirken bile ) unutmayın.
Skippy le Grand Gourou

Yanıtlar:


40

Girişinizi sistem crontab'a yazabilirsiniz /etc/crontab; bu, kullanıcının çalışmasını belirten ek bir argüman alır (genellikle root ama www-data olabilir).

Hattın olur:

*/5 * * * * www-data php /var/www/public/voto_m/artisan top >/dev/null 2>&1

Ya da kullanıcı www-data crontab'ını aşağıdakilerle düzenleyebilirsiniz su:

sudo su -c "crontab -e" www-data

1
Aslında ikinci seçenek çoğu Ubuntu sürümünde çalışmaz
user123

İkinci seçenek 12.04LTS'de benim için çalışıyor. Belki daha sonraki sürümlerde değildir?
mivk

1
ikinci seçenek
14.04

Yönetim kolaylığı için, satır /etc/cron.dtanımlayıcı bir adla, örneğin , kendi dosyasına da yerleştirilebilir /etc/cron.d/artisan.
fkraiem

2
İkinci seçenek için bunun yerine bunu deneyinsudo su -c "crontab -e" www-data -s /bin/bash
Lunfel

51

Ayrıca, -ucrontab'ı belirli bir kullanıcı için bir crontab düzenlemek için argümanla çalıştırabilirsiniz :

sudo crontab -u www-data -e

bu
14.04

3

Bir crontab'ı kullanıcı www-data olarak çalıştırmak için aşağıdaki komutu kullanabilirsiniz:

crontab -u www-data -e

Sonra bir satır yazarsınız, örneğin her 15 dakikada bir php dosyasını çalıştırmak için:

*/15  *  *  *  * php -f /path_to_cron/cron.php

Kaydederken, editör tarafından size sorulacak:

File Name to Write: /tmp/crontab.HMpG7V 

Orada sakla, endişelenme. crontab -egerçek crontab yerine / tmp dosyasını açar, böylece yeni crontab'ınızı hatalara karşı denetleyebilir ve bu hatalarla gerçek crontab'ınızın üzerine yazmanızı engelleyebilir. Hata yoksa, gerçek crontab'ınız güncellenecektir. Eğer crontab -e doğrudan gerçek crontab'ınıza yazdıysa, o zaman tüm crontab'ınızı silme riskini alırsınız.

Cronjob'ınızın çalıştığını doğrulamak için cron günlüklerini kontrol edebilirsiniz. genellikle /var/log/cron.log dosyasında veya aşağıdaki komutu çalıştırıyor:

crontab -u www-data -l

Bu benim için Ubuntu'da çalıştı
tristanbailey

Bu daha önce 4 yıl önceki kod komutanı tarafından daha doğru ve daha net bir şekilde cevaplandırılmıştı. "Sudo" kullanımını ihmal ettin. ve cron çizgisinin formatıyla ilgili olarak istenmeyen bilgiler attı.
HörmannHH

@RichieHH, neden sudo eklemeliyim? Kullanıcı zaten root olarak çalışmadığını kim söyledi? Bu komutu kullanan herkes, emri ayrıcalıklarla çalıştırması gerekirse, onu sudo ile çalıştırmak zorunda kalacağını, aksi takdirde daha iyi dokunmadığınızı bilmek için yeterli bilgiye sahip olmalıdır .. kod komutanı sadece komutu yazdı ama daha fazla bilgi vermedi
spacebiker

.. eğer o kadar
akıllıysanız

-1

Başka bir yaklaşım eklemek istiyorum. Diğer insanların da belirttiği gibi, Ubuntu (burada 16.04) ve www-data crontab güvenilmez görünüyor (belki de bir güvenlik meselesi?).

Her neyse, şirketimizde tüm cronjob'ların sunucuda kolayca erişilebilir olmasını sağlıyoruz, bu yüzden hiçbir şeyi kaçırmıyorsunuz. Aynı zamanda her şeyi (gerçekten bir şey!) Kök olarak çalıştırmak istemiyoruz.

Bu yüzden koşuyoruz

sudo crontab -e 

Normalde yaptığınız gibi, ardından komutu

* * * * * /bin/su - www-data -s /bin/bash -c '/path/to/command'

Bu, cronjob'ı root cronjobs dosyasında tutarken / path / to / komutunu www-data olarak çalıştıracaktır (ve her zaman doğru şekilde çalışacaktır). Borular kullanarak logfile'leri kök olarak (maksimum güvenlik için) yazabilmek güzel bir avantaja sahiptir.

Tercih edilen kabuğumuzu geçtiğimize dikkat edin, bu daha basit bir kabuk için / bin / sh olabilir (tam bash yeteneklerini seviyoruz). Www-data belirtilen bir kabuk içermez, bu yüzden onsuz hata alırsınız. Normalde cron işleri sadece / bin / sh ile çalıştırır.

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.