Bagaimana menjalankan crontab sebagai pengguna: www-data?

32

LAMP saya disetel agar berfungsi karena user:www-datasemua file dan folder dibuat dengan izin itu.

Saya memiliki pengaturan untuk crontab sebagai pengguna @ ubuntu.

Jadi saya lakukan crontab -edan gunakan perintah ini:

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

Pada dasarnya perintah itu hanya membuat file cache di tempat yang ditentukan (tidak ada masalah dengan itu), tetapi file cache itu dibuat dengan pengguna: izin pengguna bukan user:www-dataizin.

Bagaimana saya bisa membuatnya secara default membuat file dengan user:www-dataizin?
Saya tidak bisa pergi dan chownsetiap kali file dibuat ulang.

Terima kasih.

arma
sumber
Perhatikan bahwa beberapa skrip crontab yang dijalankan sebagai www-data (mis. Untuk awstats, atau php5sessionclean) terletak di /etc/cron.*direktori dan dengan demikian tidak dapat dilihat crontab -e(bahkan ketika menetapkan data pengguna www ).
Skippy le Grand Gourou

Jawaban:

40

Anda dapat menulis entri Anda ke sistem crontab /etc/crontab, yang membutuhkan argumen tambahan yang menetapkan pengguna untuk dijalankan (biasanya root, tetapi bisa berupa www-data).

Baris Anda akan menjadi:

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

Atau Anda dapat mengedit crontab pengguna www-data dengan su:

sudo su -c "crontab -e" www-data
mivk
sumber
1
sebenarnya pilihan kedua tidak berfungsi pada sebagian besar versi Ubuntu
user123
Opsi kedua tidak berfungsi untuk saya pada 12.04LTS. Mungkin tidak pada versi yang lebih baru?
mivk
1
Opsi kedua tidak bekerja pada 14,04
dgoosens
Untuk kemudahan manajemen, garis juga dapat dimasukkan ke dalam file sendiri di /etc/cron.ddengan nama deskriptif, misalnya , /etc/cron.d/artisan.
fkraiem
2
Untuk opsi kedua, coba inisudo su -c "crontab -e" www-data -s /bin/bash
Lunfel
51

Anda juga dapat menjalankan crontab dengan -uargumen untuk mengedit crontab untuk pengguna tertentu:

sudo crontab -u www-data -e
Komandan Kode
sumber
ini bekerja pada 14,04
dgoosens
3

Untuk menjalankan crontab sebagai www-data pengguna, Anda dapat menggunakan perintah berikut:

crontab -u www-data -e

Kemudian Anda menulis baris, misalnya untuk menjalankan file php setiap 15 menit:

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

Saat menyimpannya, Anda akan diminta oleh editor:

File Name to Write: /tmp/crontab.HMpG7V 

Simpan di sana, jangan khawatir. crontab -emembuka sebuah file di / tmp alih-alih crontab yang sebenarnya sehingga ia dapat memeriksa kesalahan Anda pada crontab baru dan mencegah Anda menimpa crontab Anda yang sebenarnya dengan kesalahan-kesalahan itu. Jika tidak ada kesalahan, maka crontab Anda yang sebenarnya akan diperbarui. Jika crontab -e baru saja menulis langsung ke crontab Anda yang sebenarnya, maka Anda berisiko mengambil seluruh crontab Anda.

Untuk memverifikasi bahwa cronjob Anda berjalan, Anda dapat memeriksa log cron. biasanya di /var/log/cron.log atau menjalankan perintah berikut:

crontab -u www-data -l
spacebiker
sumber
Yang ini bekerja untuk saya di Ubuntu
tristanbailey
Ini sebelumnya dijawab dengan benar dan lebih ringkas oleh komandan kode di atas 4 tahun sebelumnya. Anda menghilangkan penggunaan "sudo". dan melemparkan informasi yang tidak diminta mengenai format baris cron.
HörmannHH
@ RichieHH, mengapa saya harus menambahkan sudo? Siapa bilang pengguna belum berjalan sebagai root? Siapa pun yang menggunakan perintah ini harus memiliki pengetahuan yang cukup untuk mengetahui bahwa jika ia perlu menjalankan perintah dengan hak istimewa harus menjalankannya dengan sudo, jika tidak lebih baik jangan sentuh .. dan Anda mengatakan lebih ringkas ...? komandan kode hanya mengetik perintah tetapi tidak memberikan informasi lebih lanjut
spacebiker
.. jika Anda sepintar itu, lebih baik Anda mulai memberikan jawaban daripada mengkritik pekerjaan orang lain, mungkin kemudian Anda mulai mendapatkan beberapa reputasi
spacebiker
-1

Saya ingin menambahkan pendekatan lain. Seperti yang disebutkan orang lain, Ubuntu (16,04 di sini) dan www-data crontab tampaknya tidak dapat diandalkan (mungkin ini adalah masalah keamanan?).

Bagaimanapun, di perusahaan kami, kami ingin agar semua cronjobs di server mudah diakses, sehingga Anda tidak ketinggalan apa pun. Pada saat yang sama kami tidak ingin menjalankan semuanya (apapun benar-benar!) Sebagai root.

Karena itu kami berlari

sudo crontab -e 

Seperti yang biasa Anda lakukan, dan kemudian kami menetapkan perintah sebagai

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

Ini akan mengeksekusi / path / ke / perintah sebagai data-www sambil menjaga cronjob dalam file root cronjobs (dan itu akan selalu berjalan dengan benar). Ini memiliki manfaat yang bagus untuk dapat menulis file log sebagai root (untuk keamanan maksimal) menggunakan pipa.

Perhatikan bahwa kami melewati shell pilihan kami, ini juga bisa menjadi / bin / sh untuk shell yang lebih sederhana (kami hanya menyukai kemampuan bash penuh). Www-data tidak memiliki shell yang ditentukan sehingga Anda akan mendapatkan kesalahan tanpa itu. Biasanya cron menjalankan pekerjaan dengan / bin / sh saja.

Henrik
sumber