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ı.