Daha sonra çalıştırmak için uygun bir komut zamanlayın?


87

8 saat sonra bir komutu vermenin basit bir yolu nedir? Bu şekilde düşünebilirim:

nohup bash -c "sleep 28800 ; ./mycommand.sh" &

Daha uygun bir yolu var mı?


nohup+ İle ilgili bir sorun mu var sleep? Neden "uygunsuz"?
cprn

Yanıtlar:


123

atKomutu kullanabilirsiniz . atDaha sonra komutları yürütün. Yardımcı atprogram, standart girdilerden gelen komutları okuyacak ve daha sonra yürütülmesi için bunları bir iş başında olarak gruplandırmalıdır.

Genellikle, atUbuntu'da varsayılan olarak kurulur, ancak yayınınız içermiyorsa, aşağıdakiler yoluyla yükleyin:

sudo apt-get install at

Daha fazla bilgi için, seçenekler, örnekler ve diğerleri, Ubuntu Manpage Deposuna bakın.

Örnek:

at now +8 hours -f ~/myscript.sh

Ayrıca, tomorrowya da gibi uygun kısayollar da kullanabilirsiniz noon.

echo "tweet fore" | at teatime 

Uyarı: Bu komut derhal borunun soluna gönderilir,ancak daha sonra çıkışını gösterir. Örnek ayrıca, eylemleri nasıl içine aktarabileceğinizi de gösterirat. at -caşağıdaki gibi, numaralarıyla kolayca listeleyebileceğiniz zamanlanmış eylemleri inceleyebilmenizin yolu:

at -c 3

19
Daha spesifik olarak, örneğin orijinal Yazarın soru adresleri basit kullanım örneği eklemek için yararlı olabilirat now +8 hours -f ~/myscript.sh
steeldriver

6
Buna ek olarak, at 8:00komutu mutlak bir zamanda çalıştırmak ve batch"bilgisayar boştaymış gibi göründüğü zaman" için vardır
Simon Richter

4
Kimse merak ediyorsa, teatime4 de. Bazı nedenlerden dolayı manpages.ubuntu.com/manpages/raring/man1/at.1posix.html adresinde bahsedilmemiştir, ancak içinde man atve burada manpages.ubuntu.com/manpages/raring/tr/man1/at.1.html adresinde bulunur .
Dan

3
Belki de "at" yardımcı programının varsayılan olarak kurulu olmadığını ve başkasının bunu almak istediğini "at" paketini kurmasını söyleyebiliriz? Düzenleme: Her neyse, cevabı kolayca değiştirdim (manpage bağlantısını da düzelttim).
heartsmagic

4
Dikkat edin, bu boru tesisatı hemen komutu çalışacak ve sadece çıkış zamanlama içine. 4 saatlik bir 3D baskı başarısız oldu çünkü programlamak istedim gpio write 8 1ancak derhal yürütüldü.
Maciej Swic

8

Evet, bir cron işi ayarlayabilirsiniz.

Örneğin, şimdi saat 14:39:00 ve bugün Cuma, 30 Ağustos ise, aşağıdaki cron işini (8 saat sonra yürütülecek) crontab -ekomutunu kullanarak crontab dosyanıza ekleyebilirsiniz :

39 22 30 8 5  /path/to/mycommand.sh

Hakkında daha ayrıntılı:


3
Tamam, evet, Cron işleri hakkında bildiğimden bahsetmeliydim. Bu daha da karışık çünkü o zaman crontab içinde süresiz olarak oturuyor, değil mi?
Steve Bennett

4
@ RaduRădeanu: cron ile birkaç yıl sonra tekrar ateşlenebildiğine dikkat et (cuma günü 30 Ağustos'ta başka bir olay varken) ...
Olivier Dulac

2
Bu akıllıca bir kesmek. Ancak 'at' çok daha iyi bir yoldur. Bilgisayar saat 14: 39'da kapatılsaydı ne olurdu?
emory

1
Err, hala benim amacım değil. Demek istediğim, girdiğiniz metnin (sanırım) kelimenin tam anlamıyla hala etkinlikten sonra crontab'ınızda oturuyor olması, sizin için başka bir temizleme görevi oluşturmasıdır.
Steve Bennett

2
@ SteveBennett Evet, haklısınız. crontabSiz kaldırana kadar komut sizin tarafınızda kalacaktır . Bir yıl sonra, onu nereye koyduğunu ve niçin koyduğunu unuttuğunuzda, komutla ne yapacağınızı merak ederek başınızı tırmalamaya başlayacaksınız.
Paddy Landau

8

İçin Gnome tabanlı GUI kullanın cron, atve benzeri:

CronHowto'nun tanıtımı, gnome-scheduletüm çöpleri terminale yazmaktan çok daha güzel olan gui'nin kullanılmasını önermektedir (özellikle "güç" olmayan "ortalama" Ubuntu kullanıcıları * nix / bsd kullanıcıları için).

Zamanlanmış Görevleri aramak veya çalıştırmak için Unity Dash (veya diğer uygulamalar menüsünü) kullanarak çalıştırın gnome-schedule.

Gnome tabanlı Ubuntu sistemlerinde Uygulamalar -> Sistem Araçları'ndaki Gnome Zamanlanmış görevler aracı (gnome-zamanlama paketinden) Cron kullanmaya başlamanızı isteyen grafiksel bir arayüz sağlar. Proje web sitesi http://gnome-schedule.sourceforge.net/ adresindedir ; Yazılım, Yazılım Merkezi'nden veya yazarak yüklenebilir

sudo apt-get install gnome-schedule

bir terminalde.

Kullanılması gnome-scheduleev dizininde bir komut dosyası için, "at" yeni bir komut penceresinde bu tür kullanarak kurulacaktı:

görüntü tanımını buraya girin


5

Bir şey olduğunu öğrenmeden önce bunu yapmanın hızlı ve kirli bir yolunu buldum at.

Senaryonun öğlen saatlerinde çalışmasını istediğini söyle:

until [[ "$(date)" =~ "12:00:" ]]; do
    sleep 10
done
./mycommand.sh

Yarın öğlen koşmak istediğinizi söyleyin (bugün 24 Kasım benim için):

until [[ "$(date)" =~ "25 12:00:" ]]; do 
    sleep 30
done
./mycommand.sh

Güncelleme : Biraz daha iyi bir yöntem: Sadece umursadığınız sayıları test edin date +FORMAT:

until [[ $(date +%H:%M) == 21:06 ]]; do
    ...

10
Bu yanıt upvoted ettik iki kişi için kullanın lütfen at, cronya da başka herhangi gerçek zamanlayıcı uygulaması. Görev zamanlaması zor ve yeniden icat etmeniz gereken bir tekerlek değil.
dimo414

1
@ dimo414 Benim yöntemimde yanlış olan ne?
wjandrea

8
En azından israf bekliyor, meşgul. Daha kötüsü, doğru olduğu garanti edilmez; Şartın kaçırılması (mümkün değilse) tamamen mümkündür. Zamanlayıcınızı düzenli ifadelere dayandırmak da oldukça hataya açıktır. Yeterince işe yarayabilir , ancak bunun üzerinde hiçbir avantajı yoktur at.
dimo414

(Bir kenara: Cevabınızı düşürmedim, insanların kullanması gerektiğini sanmıyorum)
dimo414

4
Kullanmanın bir başka nedeni de at, işlerinin yeniden başlatılmaya devam etmesi .
Manatwork,
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.