Crontab'ma nasıl giriş ekleyebilirim?


13

İlk defa crontab kullanıyorum. Birkaç basit test cron görevi yazmak ve bunları çalıştırmak istiyorum.

$crontab * * * * * echo "Hi"

hiçbir şey üretmez.

crontab */1 * * * * echo "hi"

diyor */1: No such file or directory.

Ayrıca, şu anda çalışan cron görevlerini nasıl listeleyebilirim (yalnızca sahip olduğumları değil, aynı zamanda root gibi diğer kullanıcılar tarafından başlatılanları da).

Ve belirli bir cron görevini nasıl silebilirim?


Cron işlerini düzenleme ve oluşturma ve dosya yapısına ilişkin açıklama için bu crontab sözdizimi kılavuzuna bakın
KJS

Yanıtlar:


21

Böyle kullanamazsın crontab. man crontabBu yardımcı programı çağırmanın doğru yolunu okumak için kullanın .

crontab -eGeçerli kullanıcının cron girdilerini düzenlemek için kullanmak isteyeceksiniz (satır ekleyebilir / değiştirebilir / kaldırabilirsiniz). crontab -lGeçerli yapılandırılmış görevlerin listesini görmek için kullanın .

Diğer kullanıcıların crontabs'larını görmek için, varsayılan yüklemelerde kök olmadan bu mümkün değildir. Bkz Ben tüm kullanıcılar için tüm cron işleri listelemek nasıl (root olarak) liste her şeyi bazı yollar.

Not: Komut satırında ( *ve ?özellikle) kabuk globbing karakterleri kullanırken çok dikkatli olun . *geçerli dizindeki beklenmedik etkilere sahip olabilecek dosyalar listesine genişletilecektir. Bir *şeye argüman olarak geçmek istiyorsanız , alıntı yapın ( '*').


bu yüzden crontab -e yapıyorum ve editörde * / 1 * * * * echo "hi" girişini koyuyorum ve bu dosyayı kaydettiğimde crontab: new crontab yükleme mesajını görüyorum. ancak ekranda görüntülenen yüksek mesajları görmüyorum. Şimdi ne kaçırıyorum? Teşekkürler.
xyz

2
crontab çıktısı asla "ekranınıza" gitmez. Crontab için POSIX kılavuz sayfasından: "Standart çıktı ve standart hata, crontab girişinden yürütülen komutlar tarafından yönlendirilmezse, oluşturulan çıktı veya hatalar, uygulamaya bağlı bir yöntemle kullanıcıya gönderilir."
Mat

1
İşin çıktısı, iş sahibinin yerel posta kutusuna gönderilir. (Koşu mailyapılandırılmışsa, yerel posta kutusuna erişmek gerekir komut satırından.) Grafik ortamda 'merhaba', siz görevi ayarlayabilirsiniz görmek için: * * * * * export DISPLAY=:0; xmessage 'hi'.
manatwork

@manatwork Kolay olmayabilecek XAUTHORITY'ye de ihtiyacınız olabilir .
derobert

7

Birini düzenlemenin iki yolu vardır crontab:

  1. etkileşimli kullanılarak crontab -eaçacak olan, crontabbelirtilen düzenleyici $VISUALya da $EDITOR, ya da

  2. olmayan etkileşimli kullanılarak crontab crontab.txtbasitçe ithal edecek olan crontabdosyadan girdileri crontab.txt, yerine geçerli kullanıcı için mevcut etkin crontab'ın.

Sahip olduğunuz sorun, sadece crontabyanlış komutu kullanmanızdır .


Aşağıdakiler etkileşimli olmayan crontab manipülasyonu ile ilgilidir:

Yani, belirli görevleri programlı olarak kaldırmak için ,

$ crontab -l | grep -v 'PATTERN' >crontab.txt && crontab crontab.txt

Burada PATTERN, kaldırmak istediğiniz görevlerle eşleşen normal bir ifade bulunur. Burada, crontab -lmevcut olanı verecektir crontab.

Veya crontab-fragment.txtetkin crontab'dan kaldırmak istediğiniz adlı bir dosyada girişleriniz varsa ,

$ crontab -l | grep -v -Fx -f crontab-fragment.txt >crontab.txt && crontab crontab.txt

Bu, geçerli crontab'ı okur ve geçerli crontab-fragment.txtdizindeki dosyada da oluşan herhangi bir satırı filtreler (kaldırır) (tam satır dizesi karşılaştırması kullanarak). Sonuç, crontab.txtgeçerli crontab'ın yerini almak üzere kaydedilir ve buradan yüklenir.

Bir veya birkaç görev eklemek için aşağıdaki gibi bir şey yapın

$ crontab -l | cat - crontab-fragment.txt >crontab.txt && crontab crontab.txt

Bu, dosyanın crontab-fragment.txteklemek istediğiniz girişleri içerdiğini varsayar . Geçerli crontab'ı okur, girişleri buna ekler crontab-fragment.txtve oluşturur crontab.txt. crontab.txtDosya daha sonra anki crontab'ın yerini alır.


2

Crontab'ı etkileşimli olarak değiştirmek istiyorsanız, komutu crontab -ebaşka seçenek olmadan çalıştırın . Bu, crontab'ın bir kopyası üzerinde bir düzenleyici başlatacaktır; editörden çıktığınızda , düzenlenen kopya yeni crontab olur. VISUALVe EDITORortam değişkenleri aracılığıyla hangi düzenleyicinin başlatılacağını kontrol edebilirsiniz . Crontab'ınızı listelemek için çalıştırın crontab -l.

Eğer bir komut dosyası, sette crontab değiştirmek isterseniz VISUALve EDITORbir komut dosyası veya bir kabuğa yoluna o değiştiren yerinde sağlanan dosyayı pasajı. Editör edburada bir olasılıktır veya sed -iuygulamanızda sedbu seçenek varsa. Koşulsuz olarak bir satır eklemek istiyorsanız, kullanabilirsiniz echo … >>. Alıntıya dikkat edin; eğer şüpheniz varsa, bir komut dosyası yazın ve komut dosyasının adını olarak iletin EDITOR.

script=$(mktemp)
cat <<'EOF' >"$script"
#!/bin/sh
ed -s "$1" <<'EOS'
g/^ *[^= ][^ =]*  *[^= ][^ =]*  *[^= ][^ =]*  *[^= ][^ =]*  *[^= ][^ =]*  *echo "hi"$/d
$a
* * * * * echo "hi"
.
w
q
EOS
EOF

2

Bu biraz geç, ama buraya bakanlar için. Girdi / çıktı akışlarını VISUALve ile işlemekten daha kolay yollar vardır EDITOR.

Cron zamanlamanızı bir dosyaya, her satıra 1 iş yazabilir ve komutları crontab [filename]kullanarak catişlerinizi filenamekomut dosyanızın bir parçası olarak girebilir ve son olarak isterseniz crontab'ı arayabilirsiniz.

aslında bu, ilk önceman crontab listeleyerek ipuçları olarak en yaygın kullanımdır


2

crontabOtomasyona veya komut satırına giriş eklemek isterseniz, bunu yapabilirsiniz (sahip olmak istediğiniz süreleri ayarlama)

echo "* * * * * /yourpath/yourcommand 2>&1 >> /var/log/somelog.log" >> /var/spool/cron/root (or appropriate username)

Sonra:

service crond reload

crontabs yeniden yüklemek için.


Bu kaydedilemez; tüm unix crontab dosyalarını altında saklamaz /var/spool/cron. Daha iyi bir yol crontab(1)komut aracılığıyla olabilir .
thrig

Bu doğru olabilir, ama sizi nasıl ilkesini göstermekti olabilir bir sistemde bunu ve satır satır eklemek istiyorsanız, evet crontab hile yok. Bu mutlak bir cevap olmak değildi, ama bir şeylerinizin nerede olduğunu biliyorsanız ve toplu olarak eklemeniz gerekiyorsa bir cevaptı. Ne olduğu için al.
Chris Sprucefield

1

Bu komutla deneyin:

crontab -e 

sonra cron işinizi ekleyin:

*/1 * * * * echo "hi"

bu dosyada.


0

Daha önce başka bir yorumda belirtilmiş olsa bile, aşağıda tarif ettiğim yolu vurgulamak istiyorum. Bir dosyaya girişleri eklerken son derece yararlı buldum ve sonra dosyayı crontab'a ekledim. Bu dosya aşağıdaki iki girişi içerecektir ve dosya adı olacaktır hello-world-crontab.txt.

  • 0 09 * * * echo "Hello world!" >> /home/user/greeting.txt
  • 0 09 * * * python /home/user/greeting.py

Sonra, bu girişleri crontab'a eklemek için aşağıdaki komutu yürüttüm.

  • $ crontab hello-world-crontab.txt

Bir sonraki adım, bu girişlerin eklendiğini doğrulamaktır.

  • $ crontab -l

Her bir girişin ne yaptığına dair kısa bir açıklama:

  • Bu crontab girişi "Merhaba dünya!" /home/user/greeting.txther gün saat 9'da dosyaya .
    • 0 09 * * * echo "Hello world!" >> /home/user/greeting.txt
  • Bu crontab, 'Merhaba dünya!' Komut satırında yazdırılan bir python dosyasını çalıştırır. her gün sabah 9'da.
    • 0 09 * * * python /home/user/greeting.py
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.