Bir cron görevi hangi bağlamda yürütülür?


4

Bu soruyu bir Linux kutusunu kraliyetçe tahrip ettikten sonra soruyorum. Size biraz bilgi vereyim, nereden geldiğimi anlarsın.

Şu anda Apache altında Ruby Apps çalıştırmak için eklenen Phusion Passenger ile Apache çalıştıran bir RedHat Linux kutum var. Uygulama, düzenli olarak Cincinnati bölgesindeki Kiosklara önbellek dosyalarının sunulması için bir hizmet görevi görür. Web uygulaması harika çalışıyordu ve geriye kalan tek bölüm, önbellekte bulunması gereken tüm bilgileri almak için bir cron görevi ayarlamak ve bunları kiosklara sunmak için birkaç farklı güncelleme paketine paketlemekti. Bunu başarmak için verilerin alınması ve paketlenmesiyle ilgilenen bir Ruby senaryosu yazdım. Cron görevini ayarlamak için, sadece yerleşik crontab'ı kullandım. Senaryo şöyle gözüküyordu:

#!/bin/bash

cd ../lib
ruby pdf_cache.rb
ruby pdf_prepare.rb
ruby rss_cache.rb
ruby nightly-pack.rb 
cd ..
chown -R www.www *

Bu betik cron klasöründe bulunuyordu ve dizin yapısı şöyle görünüyordu:

.
|-- cron
|-- feeds
|-- lib
|   `-- trash
|-- logs
|-- nightly-packs
|-- pdf
|   `-- tank
|-- public
`-- tmp

ve koştum crontab -e gibi root aşağıdaki içeriklere sahip:

0 3 * * * /usr/local/apache2/ruby_projects/kiosk/cron/schedule_job

Her gün saat 3'te senaryoyu yürütmesi gereken. Ertesi gün bu cron görevini planladıktan sonra çok talihsiz bir sürprizim oldu. Cron görevi kök dizininde yürütüldü ve komutların çoğunun, dışında chmod -R www.www * sistemdeki her şeyin sahipliğini değiştiren www kullanıcı.

Sorum şu; Bir cron görevi uygulamanın doğru yolu nedir ve cron görevi hangi bağlamdan çalıştırılır? Şimdi anlıyorum ki, muhtemelen bu konunun altında çalışmamalıyım. root hesabı ve nasıl çalıştığını emin değilim www Bu kullanıcının hesabında kabuk olmadığından ve başarılı bir şekilde su -e www kullanıcı.

Yanıtlar:


2

Bahse girerim, kullanıcıya sadece bir kabuk verebilirsin, sadece uzaktan erişme yeteneğini ve onun izinlerini sınırlarsın.

Cron görevleri, Cron görevini yapan kullanıcıların altında çalışır, bu nedenle root.


Ve komut dosyası kullanıcının ana dizininden veya Linux kökünden (/) yürütülür mü. Şimdi tüm kutumun neden www kullanıcısına ait olduğunu merak ediyorum. Teşekkürler!
John

Kullanıcının giriş dizininden. Kök kullanıcınızın altındaki Cron görevini yaptığınız gibi, köke indi ve chmod -R www.www * Bu yüzden tüm kutu şimdi sahip olduğu www kullanıcı ...
Tom Wijsman

3

Başka bir öneri: ekle -e Bunun gibi senaryolardaki shebang hattına (ör. #!/bin/bash -e ). Bu, içinde herhangi bir komutun başarısız olması durumunda betiğin çıkış yapmasını sağlar. Hoş olmayan sürprizler yaşamayacağınızı garanti etmiyor, ancak senaryoyu tamamen raydan fırlatıp durduracak (tabiri caizse) ve birçok tür zincir reaksiyonu başarısızlığını önleyecektir.


0

Bunu yapmanın doğru yolu 'su -', kullanıcı olarak cronjob'ınızı ayarlayın. Sonra bu kullanıcı olarak çalışacaktır. Veya, hangi cron cini kullandığınıza bağlı olarak, kullanıcıyı tanımlamak için 6. alana sahip olabilir.

Bu yardımcı olur umarım. Başka kesmek de var, ama düzgün çalışmasını sağlayarak her zaman en iyi şekilde hizmet ediyorsun.

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.