Düzenli olarak çalışacak bir görev planlamak istiyorum ve Cron'un bunu yapmanın yolu olduğunu duydum.
Ubuntu'da Cron işlerini nasıl ekleyebilirim?
Düzenli olarak çalışacak bir görev planlamak istiyorum ve Cron'un bunu yapmanın yolu olduğunu duydum.
Ubuntu'da Cron işlerini nasıl ekleyebilirim?
Bu klasörlerden birine bir kabuk betiği yerleştirin: /etc/cron.daily
, /etc/cron.hourly
, /etc/cron.monthly
veya /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ı (cron yapılandırma dosyası) açacaktır. Dosyadaki ilk satır her şeyi açıklıyor! Her satırda, çalıştırılacak bir komutu ve zamanlamasını tanımlayabilirsiniz ve asıldığınızda biçim oldukça basittir. Yapı şu şekildedir:
minute hour day-of-month month day-of-week command
Tüm numaralar için listeleri kullanabilirsiniz, örn. 5,34,55
dakikalar alanında, hangi saat tanımlanırsa tanımlansın, 5 geçmiş, 34 geçmiş ve 55 geçmişte koşmak anlamına gelecektir.
Aralıkları da kullanabilirsiniz. Bunlar şu şekilde tanımlanır: */20
. Bu örnek her 20 anlamına gelir, bu nedenle dakika sütununda aşağıdakilere eşdeğerdir 0,20,40
.
Bu yüzden her Pazartesi öğleden sonra 5: 30'da bir komut çalıştırmak için:
30 17 * * 1 /path/to/command
veya her 15 dakikada bir
*/15 * * * * /path/to/command
Haftanın gününün 0-6 arasında olduğunu ve 0'ın Pazar olduğunu unutmayın.
Devamını okuyabilirsiniz burada.
Çalıştırmak istediğiniz iş kullanıcınızla aynı ayrıcalıklarla çalıştırılabiliyorsa, çalıştırarak düzenleyebileceğiniz bir kullanıcı crontab kullanmanızı öneririm EDITOR="gedit" crontab -e
(crontab dosyasını düzenlemek için gedit'i kullanacak) veya basitçe crontab -e
bir terminalde (varsayılan düzenleyiciyi kullanacak).
Örneğin, her 10 dakikada bir bir şey çalıştırmak istiyorsanız, bunun gibi bir satır eklersiniz
*/10 * * * * /usr/bin/somedirectory/somecommand
ve dosyayı kaydedin.
Crontab kullanıcısının içeriğini aşağıdakilerle görebilirsiniz: crontab -l
.
Root olarak çalışan bir cron işi eklemek için root'un crontab'ını çalıştırarak düzenleyebilirsiniz sudo crontab -e
.
En esnek yol crontab sistemini kullanmaktır /etc/crontab
yalnızca kök ayrıcalıklarıyla düzenleyebileceğiniz. Bu dosyada, kullanıcı her komutun belirtildiği şekilde çalıştırılması gerekir, böylece komutlarınızı root (bu ayrıcalık düzeyine ihtiyacınız olması durumunda) veya sistemdeki başka bir kullanıcı olarak çalıştırabilirsiniz.
Örneğin, her 10 dakikada bir kök 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 eklenmesine dikkat edin)
System crontab dosyasının içeriğini şu şekilde görebilirsiniz: cat /etc/crontab
.
Daha fazla bilgi için: https://help.ubuntu.com/community/CronHowto
Bunu bir GUI kullanarak yapmayı tercih ederseniz, Yazılım Merkezine gidip yükleyebilirsiniz Zamanlanmış görevler (veya koş 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, görevlerin varsayılan olarak root olarak değil kendi kullanıcınız olarak yürütüleceğini unutmayın. Bu genellikle iyi bir şeydir.
Tavsiye ederim Kde'nin Görev Zamanlayıcısı (kde-config-cron
) . Şu adresten erişin: Sistem Ayarları in the Görev Zamanlayıcısı modül orada.
Hem kişisel hem de sistem Crontab'larını 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 kısım gerçekten küçümseniyor.
KDE Görev Zamanlayıcısı normal Ubuntu'da çalışmaz. Sadece KUbuntu gibi KDE Sistemlerinde çalışır. KDE olmayan bir sistem için gnome-schedule kullanmayı tercih edersiniz
$ sudo apt-get install gnome-schedule
Uygulama, Gösterge Tablosunda Zamanlanmış görevlerdir.
Bir bash betiği üzerinden çalışacak bir Cron işi ayarlamak istedim, böylece betiği yürütmek bir cron işi ekleyecekti.
Bunu kullandığın zaman fark ettim.:
crontab -e
Sonra dosyayı oluşturur:
/var/spool/cron/crontabs/root
Burada root, crontab komutunu çalıştıran kullanıcının adıdır. Buna dayanarak 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 ayarlamamız gerekir:
chown root:root /var/spool/cron/crontabs/root
Ve doğru izinleri ayarlayın:
chmod 600 /var/spool/cron/crontabs/root
Eğer kaçtığında crontab -e
listede zaten Cron işleri var, ardından aşağıdaki komutu kullanarak listeye ekleyebilirsiniz:
echo "30 17 * * 1 /path/to/command" >> /var/spool/cron/crontabs/root
Çalışan komut dosyası örneği test_cron.sh
sembolik bağlantıyı kullanarak Ubuntu 18.04'te her dakika cron ile:
test_cron.sh
dosya:
#!/bin/bashecho "System backuped" >> /media/myname/data/backup/backup_tmp.log
Komut dosyanızda ortam değişkenlerini kullanmak istiyorsanız $USER
yollarda kesin yol yazmak daha iyidir, bash değişkenlerinizi yürütme zamanında bilmeyecektir.
myname
kullanıcı adı (kök grubunun 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 verin, gerekirse dosya oluşturulur:
sudo nano /etc/cron.allowrootmyname
Komut dosyasının yolu şöyledir /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.shchmod +x /home/myname/shell/test_cron.sh
Sembolik bağlantı ekledim:
sudo ln -s /home/myname/shell/test_cron.sh /usr/bin/test_cron
Olarak günlüğe kaydedildi myname
Yürütmek için yeni bir görev ekledim test_cron
her dakika.
crontab -e*/1 * * * * test_cron
Listedeki komutun olup olmadığını kontrol etmek için:
crontab -l*/1 * * * * test_cron
Yürütmeyi denetlemek için
grep -i cron /var/log/syslogNov 17 12:28:01 myname-ubuntu CRON[13947]: (myname) CMD (system-backup)
Sahip olduğunu düşünürsek birden fazla cron işi belirli bir kullanıcıyla ve aynı zamanlamayı paylaşmazlar. Sadece basit altında dosya oluşturabilirsiniz /etc/cron.d/
Diyelim ki dosya adı myjobs
ardından, tüm zamanlayıcılarınızı bu dosyaya yazın ve ardından aşağıdaki komutu çalıştırın.
crontab -u <username> /etc/cron.d/myjobs