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?
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:
Bu klasörlerin birinde bir shell script koyun: /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ı 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,55
dakikalar 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 .
*/15 * * * * /path/to/command
yapabileceğinizdir @reboot /path/to/command
.
Ç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/crontab
yalnı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
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.
KDE'nin Görev Zamanlayıcısı'nı ( kde-config-cron
) öneririm . 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.
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.
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
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
test_cron.sh
Sembolik 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, $USER
yollardaki 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 myname
yü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)