Bir cron işi belirli bir kullanıcı olarak nasıl çalıştırılır?


66

Makinemde belirli bir kullanıcı olarak bir cron işi çalıştırmak istiyorum. Bir cron işi için kullanıcıyı farklı olarak nasıl çalıştırabilirim?

Cron işleri bir sunucu üzerinde çalışacaktır (Ubuntu 10.0.4'te çalışıyor). 'Kullanıcılar', belirli sunucu tarafı görevlerini gerçekleştirmek için özel olarak oluşturulmuş kullanıcılardır. Bu 'kullanıcılar' ortak olarak aşağıdakilere sahiptir:

  • Sisteme giriş yapılamıyor
  • Belirli klasörlere / dosyalara sınırlı erişime sahip olmak

Yanıtlar:


79

Sadece giriş yapıp bu kullanıcının crontab'ına ekleyemeyeceğinizi varsayarak bir dosya yerleştirin /etc/cron.d. Normal bir cronjob olarak biçimlendirilmelidir, ancak fazladan bir alana sahip olmalıdır. Çalıştırma komutundan önce ve zamanlamadan sonra kullanıcıyı koyun. Sisteminizde zaten örnekleri bulabilmelisiniz.

Örnek:

#<timing>   <user> <command>
11 * * * *  root   /usr/lib/command

Bence bu doğru cevap. Bazı örnekler aramalı ve biraz daha araştırmalıyım.
12

2
Artı benden biri, istediğini yapmanın en iyi yolu bu. Daha doğrusu / etc / crontab dosyasına bakın ve göreceksiniz ki, zaman şablonundan sonra ve komuttan önce orada yazılmış "root" var. Bu, "root" komutunun bu komutları çalıştırdığı anlamına gelir. Sadece kendi zamanlamanızı ekleyin ve "root" yerine herhangi bir kullanıcıyı kullanın. Ayrıca, kullanıcı crontab'ları (Eric D tarafından belirtildiği gibi) başına kullanırsanız, sistem çapında crontab'ın (/ etc / crontab ve /etc/cron.d) işlevselliğini kaybedebilirsiniz.
Patkos Csaba,

3
Sanırım tercihen çözelti crontab -u <user> -e, her şeyi kök olarak yapabileceğiniz tek bir yerde tutmak olacaktır . Cron işlerimi sadece kullanıcı yerine işlevine göre gruplandırmayı seviyorum, bu yüzden bu benim için tercih edilen bir çözüm.
Stuart H

41

Kök olarak, user1 cronunu düzenlemek için:

crontab -u user1 -e

Komutunuza şununla da başlayabilirsiniz:

su user1 -c foo bar

Ancak çoğu zaman, komut dosyaları kendileri kök olarak başladığında kendi erişimlerini azaltır.


1

Birkaç haftadır bunu arıyorum ve bu sonunda işe yaradı ...

Komut dosyanızı kullanıcı olarak oluşturun1

ssh user1@ipaddress
nano hourly-event.sh

biraz komut gir

#!/bin/bash
echo "YAY it works" > /home/user1/yay.txt

çalıştırılabilir yap

chmod 755 hourly-event.sh

user1 için crontab dosyasını düzenleyin

sudo crontab -u user1 -e

betiğinize işaret eden en alta bir satır koyun

# m h  dom mon dow   command
*   *   *   *   *    bash ./hourly-event.sh

exit - değişiklikleri kaydetme (kaydettiğinizde bir / tmp dizini gösterecek ... tamam)

dakika beklemek

yeni oluştur yay.txt dosyasını açın

nano /home/user1/yay.txt

Şimdi nano pencerenizin dibinde Yeni Dosya diyorsa ilk ve tek satır olarak "YAY işe yarıyor" şeklinde açık bir nano pencere açmalısınız.

Ayrıca yeni crontab girişinizi user1 için şu adresten de kontrol edebilirsiniz: / var / spool / cron / crontabs / user1

BARIŞ


0

Bazen kullanıcının, özellikle "rbenv", "nvm" kullanırken ortamını yüklemesini isteyebilirsiniz:

0 0 * * * source ~/.bash_profile && cd /opt/app/current && bundle exec ruby ...

(burada komut source ~/.bash_profilesize Ruby veya Node ortamını yükleyecektir.

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.