linux: belirli bir dizinde komut nasıl çalıştırılır


16

Sadece cron işi olarak belirli bir dizinden bir komut (aslında bir kabuk komut dosyası) çalıştırmak istiyorum. Kullanmadan belirli bir dizine ayarlanması için nasıl çalıştırabilirim cd.

Yanıtlar:


16

Sorunuz çok az mantıklı. Kullanın cd. Eğer cddenediğiniz ve işe yaramadığı için yanıtın kullanılmamasını istiyorsanız, muhtemelen crontab'a doğru girmediniz.

En basit yol, cd'yi çalıştıracak ve ana görevinizi çalıştıracak küçük bir kabuk betiği yazmak ve sonra betiği cronlamak olacaktır.


1
Crontab bir işin içine birden fazla komut koymamı sağlayabilir mi? Değilse cd [path] ' i kodlamam gerekecekti . Ve yol değişebilir, bu yüzden gerçekten can sıkıcı dağıtım sorunlarına ve aynı zamanda her ne pahasına olursa olsun kaçındığım bir şey olan yapılandırmayı merkezsizleştirmeye neden olabilir.
Zombiler

1
@Zombiler: evet, bir işin içine birden fazla komut koyabilirsiniz (örneğin, noktalı virgüllerle ayırma veya &&), ancak tüm komutları içeren ayrı bir komut dosyası yazabilir ve komut dosyasının yolunu Daenyth tarafından önerilen şekilde cron'a koyabilirsiniz. Betiğiniz, isterseniz bir yapılandırma dosyasından dizini okumak gibi bir şey yapabilir - nokta, ancak dizin adını betiğinize almak istediğinizde, kullanmamak için bir mazeret yoktur cd.
David Z

Anlıyorum. Doğrudan crontab üzerinde cd kullanmak isteyeceğim çünkü bir dosyaya yazarsam, her dosyada hassas / kırılması kolay konfigürasyonlar için düzenlemek zorunda kalacağım.
Zombiler

3
Ve cd'yi crontab dosyasına koyarsanız, her crontab dosyasında düzenlemeniz gerekir. Sorunu anlamıyorum. Belki daha tam olarak ne yapmaya çalıştığınızı açıklayabilirsiniz.
garyjohn

Ve crontab dosyasından bir kabuk betiği çalıştırmanın diğer nedeni, ortamın doğru ayarlandığından emin olmaktır. Bir cron işine verilen ortam normalde çok azdır, bu yüzden genellikle daha kullanışlı bir şeye sıfırlamanız gerekir.
Jonathan Leffler

60

Sadece komut dosyasının yolunu belirtin. Gerek yok cd:

0 12 * * * /path/to/script args

Senaryonuz içinde dosyalar için görünüyorsa ., o zaman olacak kullanmak zorunda cd:

0 12 * * * cd /some/dir && /path/to/script args


4
&&, Cevabı @WillSheppard bağlantıları olduğu gibi daha iyi olurdu ;, çünkü &&önceki komut başarılı olup olmadığını yalnızca sonraki komutu çalıştırır.
Max Heiber

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.