Bir Cron işini nasıl kurarım?


534

Düzenli olarak çalışacak bir görev zamanlamak istiyorum ve Cron'un bunu yapmanın yolu olduğunu duydum.

Ubuntu'da Cron işlerini nasıl eklerim?

Yanıtlar:


655

Bu klasörlerin birinde bir shell script koyun: /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthlyveya /etc/cron.weekly.

Bunlar sizin için yeterli değilse, örneğin, ayda iki kez veya her 5 dakikada bir daha özel görevler ekleyebilirsiniz. Terminale gidin ve şunu yazın:

crontab -e

Bu, kişisel crontab'ınızı açacaktır (cron yapılandırma dosyası). Bu dosyadaki ilk satır hepsini açıklıyor! Her satırda, çalıştırılacak bir komut ve zamanlaması tanımlayabilirsiniz ve askıya aldığınızda format oldukça basittir. Yapı:

minute hour day-of-month month day-of-week command

Listeleri kullanabileceğiniz tüm sayılar için, örneğin 5,34,55dakikalar alanında, saat 5'te tanımlanmış 5 geçmiş, 34 geçmiş ve 55 geçmiş çalıştırma anlamına gelecektir.

Ayrıca aralıkları kullanabilirsiniz. Onlar böyle tanımlanmıştır: */20. Bu örnek her 20’de bir demektir, yani dakika sütununda buna eşittir 0,20,40.

Her pazartesi öğleden sonra saat 5: 30'da bir emir vermek için:

30 17 * * 1 /path/to/command

veya her 15 dakikada bir

*/15 * * * * /path/to/command

Haftanın günü, 0-6'nın Pazar olduğu 0-6 arasındadır.

Buradan daha fazla okuyabilirsiniz .


7
Bunlar sistem genelinde ve yüksek ayrıcalıklarla çalışıyorlar. Erişim veya izin için acil bir ihtiyaç olmadıkça oraya hiçbir şey koymam. Bir kural olarak, yetenekleri olmadan şeyler yapmaya çalışın. Bu nedenle, bu cevabı daha çok seviyorum: ubuntu.stackexchange.com/questions/2368/how-do-i-setup-cron-job/…
H Marcelo Morales

5
@Marcelo Morales, verilen komutları root olarak çalıştıracak! Öte yandan sudo kullanmıyorsanız, bir kullanıcı crontab oluşturacaksınız ve bu onu yaratan kullanıcı olarak çalıştırılacak!
LassePoulsen

4
* / 15 * * * * / path / to / command benim için çok kullanışlı! Teşekkürler!
Andrew Odendaal,

18
Bu değişikliklerin otomatik olarak uygulandığını belirtmekte fayda var, hiçbir şeyi yeniden başlatmanıza / yeniden yüklemenize gerek yok.
Molomby

6
Bir başka kullanışlı ipucu, bunun yerine başlangıçta bir şey yürütmek için */15 * * * * /path/to/commandyapabileceğinizdir @reboot /path/to/command.
Kenneth Worden

102

Çalıştırmak istediğiniz iş, kullanıcınızla aynı ayrıcalıklarla çalıştırılabilirse, çalıştırarak EDITOR="gedit" crontab -e(crontab dosyasını düzenlemek için gedit kullanacak) veya basitçe crontab -e(varsayılan editörü kullanacak ) düzenleyebileceğiniz bir kullanıcı crontab kullanmanızı öneririm. bir terminalde.

Örneğin, her 10 dakikada bir şeyler çalıştırmak istiyorsanız, buna benzer bir satır eklersiniz.

*/10 * * * * /usr/bin/somedirectory/somecommand

ve dosyayı kaydedin.

Kullanıcı içeriğini crontab ile birlikte görebilirsiniz crontab -l.

Kök olarak çalışan bir cron işi eklemek için, kökün crontab'ını çalıştırarak düzenleyebilirsiniz sudo crontab -e.

En esnek yol, /etc/crontabyalnızca root haklarıyla düzenleyebileceğiniz crontab sistemini kullanmaktır . Bu dosyada, kullanıcının her komutu belirtildiği şekilde çalıştırılmalıdır, böylece komutlarınızı root olarak çalıştırabilirsiniz (bu ayrıcalık seviyesine ihtiyacınız varsa) veya sistemdeki diğer herhangi bir kullanıcı.

Örneğin, her 10 dakikada bir root olarak bir şey çalıştırmak istiyorsanız, bunun gibi bir satır eklersiniz.

*/10 * * * * root /usr/bin/somedirectory/somecommand

(kullanıcının satıra eklendiğine dikkat edin)

Sistemin crontab dosyasının içeriğini ile görebilirsiniz cat /etc/crontab.

Daha fazla ayrıntı için: https://help.ubuntu.com/community/CronHowto


1
İşte cron zaman size İngilizce verecek bir tatlı interaktif cron manipülatör crontab.guru
CTS_AE

52

Bir GUI kullanarak yapmayı tercih ederseniz, Yazılım Merkezine gidip Zamanlanmış görevleri yükleyebilir (veya çalıştırabilirsiniz sudo apt-get install gnome-schedule). Cron görevleri eklemek için güçlü bir GUI sağlayacaktır.

Bu yöntemi kullanırsanız, varsayılan olarak görevlerin root olarak değil kendi kullanıcı olarak yürütüleceğini unutmayın. Bu genellikle iyi bir şeydir.



@TankorSmash Buradan
M. Becerra

Paket gereksinimleri 16.04'te karşılanamıyor
Odysseus Ithaca

26

KDE'nin Görev Zamanlayıcısı'nı ( kde-config-cron) öneririm Kde-config-cron'u yükleyin. Onu yapın Sistem Ayarları içinde Görev Zamanlayıcı orada modül.

Hem kişisel hem de sistemdeki Crontab'ları yönetir ve zaman sınırlarını oluşturma kolaylığı beni çok şaşırttı (aşağıdaki ekran görüntüsüne bakın). Bence bu bölüm gerçekten yetersiz.

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


11

KDE Görev Zamanlayıcısı normal Ubuntu'da çalışmayacak. Sadece KUbuntu gibi KDE Sistemlerinde çalışır. KDE olmayan sistemlerde gnome-schedule kullanmayı tercih edersiniz

$ sudo apt-get install gnome-schedule

App Dash'de Zamanlanmış görevler.


Bulunamadı Ubuntu 16.04
SaidbakR

Lütfen I can't install gnome schedule on Ubuntu 16.04@ askubuntu.com/questions/785657/… adresinde bir göz atın . İndirmek için bir paket var @ bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060/… . Sadece gerçekleştirin$ sudo dpkg -i gnome-schedule_2.3.0-0ubuntu16.04_amd64.deb
Antonio

10

Bir bash betiği üzerinden çalıştırmak için bir Cron işi ayarlamak istedim, bu yüzden betiği çalıştırmak bir cron işi ekleyecekti.

Bunu ne zaman kullandığınızı fark ettim:

crontab -e 

Sonra dosyayı oluşturur:

/var/spool/cron/crontabs/root

Kök, crontab komutunu çalıştıran çalışan kullanıcının adıdır. Dolayısıyla, buna bağlı olarak ve en azından 14.04'te, yeni bir Cron işi oluşturmak için aşağıdaki bash komutlarını çalıştırabiliriz:

echo "30 17 * * 1 /path/to/command" > /var/spool/cron/crontabs/root

Ayrıca dosya için doğru sahipliği de ayarlamamız gerekiyor:

chown root:root /var/spool/cron/crontabs/root

Ve doğru izinleri ayarlayın:

chmod 600 /var/spool/cron/crontabs/root

Çalıştırdığınızda crontab -e, listede zaten Cron işleri varsa, aşağıdaki komutu kullanarak listeye ekleyebilirsiniz:

echo "30 17 * * 1 /path/to/command" >> /var/spool/cron/crontabs/root

2

test_cron.shSembolik link kullanarak Ubuntu 18.04 tarihinde her dakika cron ile çalışan script örneği :

test_cron.sh dosya:

#!/bin/bash
echo "System backuped" >> /media/myname/data/backup/backup_tmp.log

Komut dosyanızdaki ortam değişkenlerini, $USERyollardaki gibi kullanmak istiyorsanız, kesin yolu yazmak daha iyidir, bash, yürütme sırasında değişkenlerinizi bilmeyecektir.

myname kullanıcı adıdır (kök grubun bir parçası, kök ayrıcalıklarının gerekli olduğundan emin değilim).

Kullanıcıların cron işlerini ayarlamasına izin ver, gerekirse dosya oluşturulur:

sudo nano /etc/cron.allow

root
myname

Komut dosyasının yolu /home/myname/shell/test_cron.sh

Sahibini değiştirdim ve çalıştırılabilir hale getirdim:

sudo chown myname /home/myname/shell/test_cron.sh
chmod +x /home/myname/shell/test_cron.sh

Sembolik bağlantı ekledim:

sudo ln -s /home/myname/shell/test_cron.sh /usr/bin/test_cron

Her dakika mynameyürütmek için yeni bir görev eklerken giriş yaptım test_cron.

crontab -e

*/1 * * * * test_cron

Komutun listede olup olmadığını kontrol etmek için:

crontab -l

*/1 * * * * test_cron

Yürütmeyi kontrol etmek için

grep -i cron /var/log/syslog

Nov 17 12:28:01 myname-ubuntu CRON[13947]: (myname) CMD (system-backup)
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.