crontab berjalan sebagai pengguna tertentu

19

Saya perlu menjalankan skrip setiap hari. Skrip harus dijalankan sebagai pengguna tertentu (mis. Pengguna1) bukan sebagai root. Jadi saya meletakkan file cron di /etc/cron.d dan memasukkan nama pengguna di baris (kolom ke-2). Tetapi itu memberikan kesalahan mengatakan bahwa perintah tidak ditemukan. Saya menduga bahwa skrip tidak dijalankan sebagai lingkungan pengguna1. Apakah saya melewatkan sesuatu?

Sam Kong
sumber
3
Bisakah Anda menunjukkan kepada kami entri crontab yang Anda gunakan?
user9517

Jawaban:

33

Hanya /etc/crontabdan file dalam /etc/cron.d/memiliki bidang nama pengguna. Dalam file itu Anda dapat melakukan ini:

1 1 * * * username /path/to/your/script.sh

Dari crontab root, sudo crontab -eAnda dapat menggunakan:

1 1 * * * su username -c "/path/to/your/script.sh"

Atau Anda dapat menggunakan crontab aktual pengguna seperti ini:

sudo crontab -u username -e

The Kolom kedua di file crontab adalah untuk jam yang Anda inginkan pekerjaan untuk dijalankan pada. Apakah maksud Anda bidang keenam?

Ladadadada
sumber
File di /etc/cron.d ambil argumen pengguna: help.ubuntu.com/community/CronHowto#Advanced_Crontab dan mengapa Anda melakukan "sudo su" jika Anda mengeksekusi sebagai root? Bagaimanapun, Anda ingin "su-l" menggunakan lingkungan login untuk pengguna, karena ini kemungkinan besar merupakan masalah PATH, dari uraian masalahnya.
cjc
Bukankah file di /etc/cron.d merupakan ekstensi dari / etc / crontab? Pada sistem saya harus menyerahkan semua file di /etc/cron.d memiliki nama pengguna yang ditentukan.
user9517
Ah, memang. /etc/cron.d/file adalah bagian dari /etc/crontab. sudojuga tidak ada gunanya. Saya akan menghapus bagian itu.
Ladadadada
2
Mengenai menempatkan sudo di crontab: (a) sudo su... umumnya tidak perlu; sudo -u <user> <command>biasanya cukup. (B) sudo akan tersedak pada beberapa sistem jika tidak ada TTY yang terpasang (seperti ketika dijalankan oleh cron). Itu bisa diperbaiki di file sudoers Anda.
tylerl
4

Anda mungkin perlu mengatur PATH untuk pengguna itu, jika executable yang Anda gunakan ada di, katakanlah, / usr / local / bin. Untuk mengatur PATH, letakkan sesuatu seperti ini di depan cronjobs:

PATH=/bin:/usr/bin:/usr/local/bin

*/5 * * * * user1 sample_executable

Cara lain adalah dengan menentukan secara lengkap path ke sample_executable di cronjob Anda, jadi:

*/5 * * * * user1 /path/to/sample_executable

Jika sample_executable merujuk pada executable yang tidak ada dalam PATH standar, Anda harus menggunakan opsi pertama.

cjc
sumber
1

Direktori khas untuk crontab pengguna ada di / var / spool / cron / crontab. Format file adalah yang tidak menyertakan nama pengguna. Crontab pengguna dimiliki oleh pengguna dan dinamai setelah pengguna dengan mode 0600. Ini paling baik ditangani dengan menulis file tab Anda dan gunakan crontab -u username filenameuntuk mengatur entri cron apa pun yang Anda inginkan untuk pengguna itu.

Jeff Ferland
sumber