Bir cron işi sadece bir kez nasıl çalıştırılır?


14

Başladığı an sonsuza dek sürecek bir işim var. Bu yüzden "crontab -e" dosyasına girdikten ve yeniden başlattığınızda (veya) kaydettikten sonra yalnızca bir kez başlatmak istiyorum.

Bunu nasıl başarabilirim?

Yanıtlar:


22

Eğer bir komut çalıştırmak isterseniz bir kez daha sonraki bir tarihte kullanmak atkomutu.

Bir komutun sistem önyüklemesinde bir kez çalıştırılmasını istiyorsanız , doğru çözüm aşağıdakilerden birini kullanmaktır:

  • sistem RC komut dosyaları (/etc/rc.local)
  • @rebootÖzel önek ile crontab (bkz. sayfa)

İkincisi, root olmayan bir kullanıcı için tek seçenektir.


2
@Reboot'tan bahsetmek için +1.
Alex Holst

Her zaman mümkünse /etc/rc.local kullanmayı tercih ederim ... @reboot aslında sistem önyükleme değil, crond başlangıçta komutları çalıştırdığından şüpheleniyorum. İnce ama olası fark.
MikeyB

diyelim ki crontab dosyasına @reboot "cmd ............." yazıp kaydettim. Bu komut şimdi başlayacak mı? (veya) Yalnızca yeniden başlatıldıktan sonra mı başlıyor?
Rama Vadakattu

Deneyin ve görün :) Muhtemelen yapmanız gereken şey crontab içine koymak, sonra kullanarak derhal yürütmek için zamanlamaat now
MikeyB

İyi cevap. Her zaman unuturum @reboot.
Bill Weiss

9

(1) 'de ileride bir noktada iş yapmak için kullanabilirsiniz. Ancak, önyüklemede bir şey çalıştırmak istiyorsanız ve kendi başına çalışmaya devam ederse, /etc/init.d/ dosyasına bunun için bir giriş mi istiyorsunuz? Bu, önyüklemede başlatmanıza izin verir.


1
Ayrıca rc.local kullanabilirsiniz. /Etc/rc.local "içindeki tüm diğer komut dosyalarından sonra yürütülecektir . Sys V stili init öğelerinin tamamını yapmak istemiyorsanız rc.local içine kendi başlatma öğelerinizi koyabilirsiniz."
Joe

Joe: iyi çağrı.
Bill Weiss

At komutuyla başlayan işlemi nasıl durdurabilirim? (i "ps komut" kullanarak işlem kimlikleri listesini gördükten sonra öldürmek işlem kimliği biliyorum "bu komut" da için de çalışır). Özel komut dosyaları oluşturmak kolay mı?
Rama Vadakattu

İkisine de evet. Tüm işlemler kill(kendi izinleriniz için yaptığınız izinlere sahip olduğunuzu varsayarak) kullanarak durdurulabilir . Bir init betiği yapmak gerçekten çok kolay. /etc/init.d/Çok uzun olmayan bir komut dosyasını arayın ve kendinizinkini modelleyin veya google making init scripts (your distribution).
Bill Weiss

1
Birçok dağıtım /etc/init.d/skeleton, kullanımınıza uyarlayabileceğiniz bir iskelet komut dosyası ( openSuSE üzerinde) içerir.
MikeyB

3

Sadece bir kez çalışan ve ölmesini söyleyene kadar sonsuza dek süren bir işe "daemon" denir. Normalde /etc/init.d/ içindeki init komut dosyaları ile başlatılırlar.

İşiniz bir noktada bitiyorsa ve bir defalık bir iş olarak kabul edilebilirse, at komutuna bakmak isteyebilirsiniz. Mesela ben bu gece 10'da find komutunu çalıştırmak istedim ve ben sadece bu bir kez yapardı:

$ at 10PM
at> find /root > /root/find_results.list
at> <EOT>
job 3 at 2010-02-10 22:00

1

At komutuna bir göz atın


sistemler yeniden başlatıldığında ne olacak? Tekrar "komutta" girmem gerekiyor mu?
Rama Vadakattu

At komut girişleri yeniden başlatmalarda kaybolmaz. ibm.com/developerworks/linux/library/l-job-scheduling.html iş planlaması için ilginç bir giriş
Dominik

@Rama Vadakattu: "at komutları yeniden başlatmalarda kaybolmaz." ... henüz idam edilmedi. MikeyB'nin cevabına bakın .
sonraki duyuruya kadar duraklatıldı.

tamam bu konuda daha fazla araştırma yapacağım.
Rama Vadakattu
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.