belirli bir kullanıcı olarak çalışan crontab


20

Günlük bir senaryo çalıştırmam gerekiyor. Komut dosyası, kök olarak değil, belirli bir kullanıcı (ör. Kullanıcı1) olarak çalıştırılmalıdır. Bu yüzden cron dosyasını /etc/cron.d dosyasına koydum ve kullanıcı adını satıra koydum (2. sütun). Ancak komutun bulunmadığını söyleyen bir hata veriyor. Komut dosyasının user1 ortamı olarak çalıştırılmadığından şüpheleniyorum. Bir şey mi kaçırdım?


3
Lütfen kullandığınız crontab girişini gösterir misiniz?
user9517

Yanıtlar:


34

Yalnızca /etc/crontabve içindeki dosyaların /etc/cron.d/kullanıcı adı alanı vardır. Bu dosyada şunları yapabilirsiniz:

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

Kökün crontab'ından sudo crontab -eşunları kullanabilirsiniz:

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

Veya kullanıcının gerçek crontab'ını şu şekilde kullanabilirsiniz:

sudo crontab -u username -e

İkinci sütun herhangi crontab dosyasında en vadede işi istediğiniz saatte içindir. Altıncı alanı mı kastettiniz?


/Etc/cron.d dosyasında bir kullanıcı argümanı var: help.ubuntu.com/community/CronHowto#Advanced_Crontab ve neden root olarak çalışıyorsanız "sudo su" yapıyorsunuz? Her durumda, "su -l" kullanıcı için oturum açma ortamını kullanmak isteyeceksiniz, çünkü bu büyük olasılıkla bir PATH sorunu, sorunun açıklamasından.
cjc

/Etc/cron.d içindeki dosyalar / etc / crontab uzantısı değil mi? Sistemlerde /etc/cron.d dosyasındaki tüm dosyaları belirtmem gerekiyor.
user9517

Ah, gerçekten. /etc/cron.d/dosyalar şunlardır parçası /etc/crontab. sudoanlamsızdır. O parçayı çıkaracağım.
Ladadadada

2
Sudo'yu crontab'a koyma konusunda: (a) sudo su... genellikle gereksizdir; sudo -u <user> <command>genellikle yeterlidir. (b) sudo, bağlı bir TTY yoksa (cron tarafından çalıştırıldığında olduğu gibi) bazı sistemlerde boğulur. Bu sudoers dosyanızda düzeltilebilir.
tylerl

4

Kullandığınız yürütülebilir dosya, örneğin, / usr / local / bin ise, bu kullanıcı için PATH ayarlamanız gerekebilir. PATH'i ayarlamak için, cronjobs'tan önce böyle bir şey koyun:

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

*/5 * * * * user1 sample_executable

Diğer yol, cronjob'ınızda sample_executable yolunu tam olarak belirtmektir, bu nedenle:

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

Sample_executable standart PATH içinde olmayan yürütülebilir dosyaları ifade ediyorsa, ilk seçeneği kullanmalısınız.


1

Kullanıcı crontabs için tipik dizin / var / spool / cron / crontabs dizinindedir. Dosya biçimi, kullanıcı adını içermeyen biçimdir. Kullanıcı crontabs kullanıcı tarafından sahip crontab -u username filenameolunur ve mod 0600 ile kullanıcının adını almıştır. Bu en iyi sekme dosyanızı yazarak ve o kullanıcı için istediğiniz cron girdilerini ayarlamak için kullanılı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.