Crontab'ım neden çalışmıyor ve nasıl giderebilirim?


225

Bu cron & crontab kullanımı hakkında Kanonik bir Soru .

Buraya yönlendirildiniz, çünkü topluluk, sorunuzun yanıtının aşağıda bulunabileceğinden oldukça emin. Sorunuz aşağıda cevaplanmıyorsa, cevaplar topluluğun size yardımcı olacağı bilgileri toplamanıza yardımcı olur. Bu bilgiler orijinal sorunuzla düzenlenmelidir.

' Crontab'ım neden çalışmıyor? ' Cevabını nasıl verebilirim? 'aşağıda görülebilir. Bu cron, crontab vurgulanan sisteme hitap eder .


2
Bu neden crontab'ın AskUbuntu'da işe yaramadığını gösteren çok büyük bir Neden .
Dan Dascalescu

1
@DanDascalescu Eric'in daha fazla rep alması gerekiyor gibi görünüyor
Ben En Aptal

1
Sunucu Arıza SE'ye yeni katıldım (bu nedenle yalnızca 101 rep), ancak bu soruyu -1 olarak vermeyi çok isterim !! Bu soru sadece rep almak için yapılmış mıydı? @IamtheMostStupidPerson Sizinle tamamen katılıyorum ...
Holyprogrammer

Bu 13 yaşındaki padawanlardaki batı ideolojisi bir süpernova gibi hem ders kitabı hem de kördür. Her iki sorunuzu da yanıtlamak için: evet, temsilcisi için yaptım ve evet, Eric'in daha fazla itibar görmesi gerekiyor. Daha ne kadar repe ihtiyacım var ?? Daha. youtu.be/IaDt9T7BF38?t=262
Eric Leschinski

Yanıtlar:


317

Tüm crontab ile ilgili sıkıntılarınızı / problemlerinizi nasıl çözersiniz (Linux)


Bu bir topluluk wiki , bu cevapta yanlış bir şey fark ederseniz veya ek bilgiye sahipseniz, lütfen düzenleyin.


İlk olarak, temel terminoloji:

  • cron (8) , zamanlanmış komutları yerine getiren servistir.
  • crontab (1) , kullanıcı crontab (5) dosyalarını değiştirmek için kullanılan programdır.
  • crontab (5) , cron (8) ile ilgili talimatları içeren kullanıcı başına bir dosyadır.

Sonra, cron hakkında eğitim:

Bir sistemdeki her kullanıcının kendi crontab dosyası olabilir. Kök ve kullanıcı crontab dosyalarının konumu sisteme bağlıdır ancak bunlar genellikle aşağıdadır /var/spool/cron.

Sistem çapında bir /etc/crontabdosya var, /etc/cron.ddizin cron tarafından da okunan ve harekete geçirilen crontab parçalarını içerebilir. Bazı Linux dağıtımları (örn. Red Hat) ayrıca /etc/cron.{hourly,daily,weekly,monthly}dizinler, içinde her saat / gün / hafta / ay içinde yürütülecek komut dosyaları ve kök ayrıcalıklara sahiptir.

root her zaman crontab komutunu kullanabilir; Düzenli kullanıcılara erişim izni verilebilir veya verilmeyebilir. Crontab dosyasını komutla düzenleyip crontab -ekaydettiğinizde, crond temel geçerliliğini kontrol eder, ancak crontab dosyanızın doğru şekilde oluşturulduğunu garanti etmez. cron.denyHangi kullanıcıların cron kullanamayacağını belirten bir dosya var . cron.denyDosya konumu sistemi bağlıdır ve tüm kullanıcılar cron'u kullanmanızı sağlayacak olan silinebilir.

Bilgisayar açılmazsa veya crond arka plan programı çalışmıyorsa ve çalıştırılacak bir komutun tarih / saati geçmişse, crond yakalamaz ve sorguları geçemez.

crontab details, nasıl bir komut formüle edileceği:

Bir crontab komutu, tek bir satır ile temsil edilir. \Bir komutu birden çok satıra genişletmek için kullanamazsınız . Hash ( #) işareti, bu satırdaki herhangi bir şeyin cron tarafından yok sayıldığı anlamına gelir. Önde gelen boşluk ve boş satırlar dikkate alınmaz.

%Komutunuzdaki yüzde ( ) işaretini kullanırken ÇOK dikkatli olun . Kaçmadıkları sürece \%yeni satırlara dönüştürülürler ve ilk kaçan olmayandan sonra her şey %stdin komutuna geçirilir.

Crontab dosyaları için iki format vardır:

  • Kullanıcı crontabs

    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
    # |  |  |  |  |
    # *  *  *  *  *   command to be executed
    
  • Sistem geneli /etc/crontabve /etc/cron.dparçaları

    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
    # |  |  |  |  |
    # *  *  *  *  * user-name  command to be executed
    

İkincisinin bir kullanıcı adı gerektirdiğine dikkat edin. Komut adlandırılmış kullanıcı olarak çalıştırılacaktır.

Satırın ilk 5 alanı komutun çalıştırılması gereken süreyi gösterir. Saat belirtiminde sayıları veya geçerli gün / ay adlarını kullanabilirsiniz.

  • Alanlar boşluklarla veya sekmelerle ayrılır.
  • Bir ,listeyi belirtmek için virgül ( ) kullanılır; örneğin 1,4,6,8.
  • Aralıklar bir tire ( -) ile belirtilir ve listelerle birleştirilebilir, örn. 1-3,9-12, yani 1 ile 3 arasında, sonra 9 ile 12 arasında listeler.
  • /Karakteri (... 2,7,12,17,22) daha sonra 2 de her 5 başlayacağı anlamına gelmektedir bir adım örneğin 2/5 tanıtmak için kullanılabilir. Sonunu geçmezler.
  • Bir *alandaki yıldız ( ), o alanın tüm aralığını gösterir (örneğin 0-59, dakika alanı için).
  • Aralıklar ve adımlar birleştirilebilir, örneğin */2ilgili alan için minimumdan başlayarak daha sonra her 2 örneğin 0 dakika (0,2 ... 58), aylar için 1 (1,3 ... 11) vb.

Hata ayıklama cron komutları

Postayı kontrol et!

Varsayılan olarak cron komuttan herhangi bir çıktıyı, komutu çalıştığı kullanıcıya postalar. Çıktı yoksa posta da olmaz. Eğer cron'un farklı bir hesaba posta göndermesini istiyorsanız, MAILTO ortam değişkenini crontab dosyasında ayarlayabilirsiniz;

MAILTO=user@somehost.tld
1 2 * * * /path/to/your/command

Çıktıyı kendiniz yakalayın

Stdout ve stderr'yi bir dosyaya yönlendirebilirsiniz. Çıktı yakalama için tam sözdizimi, hangi kabuk cronunun kullandığına bağlı olarak değişebilir. İşte tüm çıktıları bir dosyaya kaydeden iki örnek /tmp/mycommand.log:

1 2 * * * /path/to/your/command &>/tmp/mycommand.log
1 2 * * * /path/to/your/command >/tmp/mycommand.log 2>&1

Günlüklere bak

Cron, eylemlerini syslog aracılığıyla kaydeder (bu, kurulumunuza bağlı olarak) genellikle /var/log/cronveya üzerine gider /var/log/syslog.

Gerekirse, cron ifadelerini örneğin ile filtreleyebilirsiniz.

grep CRON /var/log/syslog 

Şimdi cronun temellerini, dosyaların nerede olduklarını ve nasıl kullanacağımızı gözden geçirdik, bazı ortak problemlere bakalım.

Cron'un çalıştığını kontrol et

Eğer cron çalışmıyorsa, komutlarınız programlanmayacak ...

ps -ef | grep cron | grep -v grep

sana bir şey almalıyım

root    1224   1  0 Nov16 ?    00:00:03 cron

veya

root    2018   1  0 Nov14 ?    00:00:06 crond

Yeniden başlatılmazsa

/sbin/service cron start

veya

/sbin/service crond start

Başka yöntemler de olabilir; dağıtımınızın sağladıklarını kullanın.

cron komutunuzu sınırlı bir ortamda çalıştırır.

Hangi ortam değişkenlerinin mevcut olduğu çok sınırlı olabilir. Genellikle, sadece böyle tanımlanan birkaç değişken, alırsınız $LOGNAME, $HOMEve $PATH.

Belirli bir not PATHile sınırlıdır /bin:/usr/bin. "Cron betiğim çalışmıyor" sorunlarının büyük çoğunluğu bu kısıtlayıcı yoldan kaynaklanıyor . Komutunuz farklı bir konumda ise bunu birkaç yolla çözebilirsiniz:

  1. Komutunuzun tam yolunu belirtin.

    1 2 * * * /path/to/your/command
    
  2. Crontab dosyasında uygun bir PATH sağlayın

    PATH=/usr:/usr/bin:/path/to/something/else
    1 2 * * * command 
    

Komutunuz başka ortam değişkenleri gerektiriyorsa, onları crontab dosyasında da tanımlayabilirsiniz.

cron komutunuzu cwd == $ HOME ile çalıştırır

Çalıştırdığınız programın dosya sisteminde nerede olduğuna bakılmaksızın, cron çalıştığında programın geçerli çalışma dizini kullanıcının ana dizini olacaktır . Programınızdaki dosyalara erişirseniz, göreceli yollar kullanıyorsanız veya (tercihen) sadece her yerde tam nitelikli yollar kullanıyorsanız ve herkesi çok fazla karışıklıktan kurtarıyorsanız, bunu dikkate almanız gerekir.

Crontab'ımdaki son komut çalışmıyor

Cron genellikle komutların yeni bir satırla sonlandırılmasını gerektirir. Crontab'ınızı düzenleyin; Son komutu içeren satırın sonuna gidin ve yeni bir satır ekleyin (enter tuşuna basın).

Crontab formatını kontrol edin

/ Etc / crontab için bir kullanıcı crontab formatlı crontab'ı ya da /etc/cron.d içindeki parçalarını kullanamazsınız. Kullanıcı formatlı bir crontab, bir satırın 6. pozisyonunda bir kullanıcı adı içermezken, formatlanmış bir sistem kullanıcı adını içerir ve komutu bu kullanıcı olarak çalıştırır.

/Etc/cron.{hourly,daily, weekly,monthly} dosyasına bir dosya koydum ve çalışmadı

  • Dosya adı uzantısı bkz olmadığını kontrol edin çalışma parçaları
  • Dosyanın yürütme izinlerine sahip olduğundan emin olun.
  • Komut dosyanızı yürütürken ne kullanacağınızı sisteme söyleyin (ör. #!/bin/shEn üste koyun )

Cron tarihiyle ilgili hatalar

Tarihiniz yakın zamanda bir kullanıcı veya sistem güncellemesi, saat dilimi veya benzeri bir tarihle değiştirilirse, crontab hatalı davranmaya başlar ve bazen işe yarayan bazen işe yaramaz, tuhaf hatalar sergileyecektir. Bu, crontab'ın zamanın altından sapmasıyla “istediğini yapmayı” denemesidir. Saat değiştikten sonra "dakika" alanı etkisiz hale gelecektir. Bu senaryoda, sadece yıldızlar kabul edilecektir. Cron'u yeniden başlatın ve internete bağlanmadan tekrar deneyin (böylece tarihin zaman sunucularından birine sıfırlama şansı yoktur).

Yine yüzde işaretleri

Yüzde işaretleri hakkındaki önerileri vurgulamak için, işte cron'un onlarla ne yaptığına bir örnek:

# cron entry
* * * * * cat >$HOME/cron.out%foo%bar%baz

3 satırı içeren ~ / cron.out dosyasını yaratacaktır

foo
bar
baz

Bu özellikle datekomutu kullanırken müdahalecidir . Yüzde işaretlerinden kaçtığınızdan emin olun.

* * * * * /path/to/command --day "$(date "+\%Y\%m\%d")"

Ayrıca, 'sınırlı env' bölümünde LD_LIBRARY_PATH'nin, cron görevinizin paylaşılan kütüphaneleri bulamadığı için başarısız olması durumunda ek bir dizine sahip olması gerekebileceğini de belirtmek isteyebilirsiniz.
DavidJ

bunun gibi bir şey bile yazabileceğinizi unutmayın: 35 1,5-23 / 2 * * * 35,1,5,7,9, .. * * yerine bir şeyler de. * Ayrıca, bu crontab.guru yaptığınız girişleri çevirir. insan dili
Dennis Nolte

1
Çıktı yakalama benim için çalışmıyor, sh kabuğu nedeniyle olabilir. Sanırım bu daha taşınabilir:... /path/to/your/command >/tmp/mycommand.log 2>&1
chus 14

bu benim için çalıştı:sudo apt-get install postfix
jmunsch

cron işi de dosyanın ağırlığına bağlı mı? Python'da basit merhaba dünyasını cron ile koştuğum için işe yaradı. Fakat ikinci kodum biraz ağırdı ve normalde çalışıyordu ancak cron ile dosyaya herhangi bir çıktı vermiyor.
Devendra Bhat

22

Debian Linux ve türevi (Ubuntu, Mint, vb.) Cron işlerinin yürütülmesini engelleyebilecek bazı özelliklere sahiptir; Özellikle, dosyalar içinde /etc/cron.d, /etc/cron.{hourly,daily,weekly,monthly}gerekir:

  • kök olmak
  • sadece root tarafından yazılabilir ol
  • grup veya diğer kullanıcılar tarafından yazılamaz
  • Noktasız bir isme sahip . veya '-' ve '_' dışında başka herhangi bir özel karakter.

Sonuncusu, düzenli olarak şüphesiz kullanıcıları incitir; adlı bu klasörlerden birinde herhangi bir komut dosyası özellikle whatever.sh, mycron.py, testfile.plvb olacak değil hiç yürütülecek.

Tecrübelerime göre, bu özel nokta, Debian ve türevlerinde icra edilmeyen bir cronjob için en sık neden oldu.

man cronGerekirse daha fazla ayrıntı için bakınız .


19

Eğer cronjobs'unuz çalışmayı keserse, şifrenizin süresinin dolmadığını kontrol edin. Kullanıcının kimliğini doğrulamakla ilgili sorunları gösteren, aşağıdakine benzer
mesajlar olacaktır /var/log/messages:

(username) FAILED to authorize user with PAM (Authentication token is no longer valid; new one required)


2
Sadece bunu da aldım (hata mesajı dosya / var / log / syslog benim için). Benim durumumda, oluşturma zamanında, kök parolayı (isteğe bağlı olarak) başka bir taneye sıfırlayan ve görünüşe göre oraya girip değiştirene kadar tüm cron işleri çalışmayan bir DigitalOcean kutusu. Aylak. Düzeltme gibi bir şeysudo -u root passwd
rogerdpack

12

Yaygın olmayan ve düzensiz zamanlamalar

Cron, her şey çok basit bir zamanlayıcı olarak kabul edilir ve sözdizimi, yöneticinin çok nadir görülen zamanlamaları kolayca oluşturmasına izin vermez.

Genellikle " commandher 5 dakikada bir çalıştırılacak" olarak açıklanacak olan aşağıdaki işleri göz önünde bulundurun :

*/5 * * * * /path/to/your/command

e karşı:

*/7 * * * * /path/to/your/command

hangi gelmez her zaman çalıştırmak commandher 7 dakikada .

/Bir basamağı tanıtmak için karakterin kullanılabileceğini unutmayın, ancak bu adımların, örneğin */7dakikalardan her 7. dakikada bir, 0-59 yani 0,7,14,21,28,35,42,49 56 ancak bir saat ve bir sonraki arasında olacak yığınlar arasında sadece 4 dakika sonra, 00:56yeni bir dizi başlar 01:00, 01:07vb (ve toplu yayınlanmaz 01:03, 01:10, 01:17vs.).


Bunun yerine ne yapmalı?

Birden çok parti oluştur

Tek bir cron işi yerine, istenilen zamanlamayla sonuçlanan birden fazla parti oluşturun.

Örneğin, her 40 dakikada bir parti çalıştırmak (00:00, 00:40, 01:20, 02:00 vb.) İki parti oluşturur; biri çift saatlerde iki kez, ikincisi ise tek saatlerde çalışan

# The following lines create a batch that runs every 40 minutes i.e.

# runs on   0:00, 0:40,        02:00, 02:40         04:00 etc to 22:40
0,40 */2 * * * /path/to/your/command

# runs on               01:20,               03:20,       etc to 23:20
20 1/2 * * * /path/to/your/command

# Combined: 0:00, 0:40, 01:20, 02:00, 02:40, 03:20, 04:00 etc.

Gruplarınızı daha az sıklıkta çalıştırın

Partinizi 7 dakikada bir çalıştırmak yerine, birden çok partide parçalanması zor bir programdır, bunun yerine her 10 dakikada bir çalıştırın.

Gruplarınızı daha sık başlatın (ancak birden çok partinin aynı anda çalışmasını önleyin)

Birçok tuhaf program, parti çalışma sürelerinin artması / dalgalanması ve ardından aynı partinin aynı anda üst üste gelmesini ve aynı anda çalışmasını önlemek için partilerin bir miktar ek güvenlik marjı ile programlanması nedeniyle gelişmektedir.

Bunun yerine, farklı düşünün ve önceki bir çalışma henüz bitmediyse, ancak başka şekilde çalışacaksa, zarafetle başarısız olacak bir cronjob oluşturun. Bu soru ve cevaplara bakın :

* * * * * /usr/bin/flock -n /tmp/fcj.lockfile /usr/local/bin/frequent_cron_job 

Bu önceki / usr / local / bin / frequent_cron_job dizisinin tamamlanmasından hemen sonra hemen yeni bir çalışmaya başlayacaktır.

Gruplarınızı daha sık başlatın (ancak koşullar uygun olmadığında dikkatlice çıkın)

Cron sözdizimi sınırlı olduğundan , toplu işin içine (veya mevcut toplu işin etrafındaki bir sarmalayıcı komut dosyasına) daha karmaşık koşullar ve mantık koymaya karar verebilirsiniz . Bu, kodunuzu yorumlamak için favori komut dosyası dillerinin gelişmiş özelliklerini kullanmanıza olanak tanır ve crontab girişinde okunması zor yapıları engeller.

Kısaca, seven-minute-jobşöyle bir şeye benzer:

#!/bin/bash
# seven-minute-job
# This batch will only run when 420 seconds (7 min) have passed
# since the file /tmp/lastrun was either created or updated

if [ ! -f /tmp/lastrun ] ; then
    touch /tmp/lastrun
fi

if [ $(( $(date +%s) - $(date -r /tmp/lastrun +%s) )) -lt 420 ] ; then
     # The minimum interval of 7 minutes between successive batches hasn't passed yet.
    exit 0
fi

####  Start running your actual batch job below

/path/to/your/command

#### actual batch job is done, now update the time stamp
date > /tmp/lastrun
#EOF

Daha sonra güvenle her dakika koşmaya çalışabilirsiniz:

* * * * * /path/to/your/seven-minute-job

Tarih 1 arasında ne zaman bir farklı ama benzer sorun Basitçe her Pazartesi ve çıkış çalıştırmak için toplu zamanlama vb her ayın ilk Pazartesi (ya da ikinci Çarşamba) çalıştırmak için bir toplu zamanlama olur st veya 7 inci ve haftanın günü pazartesi değil.

#!/bin/bash
# first-monday-of-the-month-housekeeping-job

# exit if today is not a Monday (and prevent locale issues by using the day number) 
if [ $(date +%u) != 1 ] ; then
  exit 0
fi

# exit if today is not the first Monday
if [ $(date +%d) -gt 7 ] ; then
  exit 0
fi

####  Start running your actual batch job below

/path/to/your/command

#EOF

Daha sonra güvenle her pazartesi günü koşmaya çalışabilirsiniz:

0 0 * * 1 /path/to/your/first-monday-of-the-month-housekeeping-job

Cron kullanmayın

İhtiyaçlarınız karmaşıksa, karmaşık programları çalıştırmak için tasarlanmış (birden fazla sunucuya dağıtılmış) ve tetikleyicileri, iş bağımlılıklarını, hata işlemeyi, yeniden denemeleri ve yeniden deneme izlemelerini vb. Destekleyen daha gelişmiş bir ürün kullanmayı düşünebilirsiniz. " iş planlama ve / veya" iş yükü otomasyonu ".


8

PHP özgü

Eğer böyle bir cron işi varsa:

php /bla/bla/something.php >> /var/logs/somelog-for-stdout.log

Ve hatalar beklediğinde, size gönderileceklerini, ancak göndermeyeceklerini - kontrol edin.

PHP varsayılan olarak STDOUT'a hata göndermiyor. @see https://bugs.php.net/bug.php?id=22839

Bunu düzeltmek için, cli`nin php.ini dosyasını veya satırınıza (veya PHP'nin bash paketine) ekleyin:

  • --define display_startup_errors = 1
  • --define display_errors = 'stderr'

1. ayar, 'Memory oops' ve 2nd gibi ölümcül ölümlere sahip olmanıza olanak tanır - hepsini STDERR'ye yönlendirir. Sadece iyi uyuyabildikten sonra hepsi yeni oturum açmak yerine kök e-postanıza gönderilir.


2
Bu hata raporu 2007'de PHP 5.2+ dallarına eklenen yamanın durumu ile birlikte kapatıldı. Bunun gerekli olduğuna emin misin? Ben sadece PHP 5.4 denedim ve iyi çalışıyor gibi görünüyor. (Yine de PHP 4 için hala gereklidir).
Xeoncross

@Xeoncross cevap tarihine bakınız :)
gaRex

1
Evet, 2013'te cevapladığınızdan beri kafam karıştı ve bilet '07'de geri döndü.
Xeoncross

0

Cevabımı burada eksiksizlik için eklemek ve potansiyel olarak yardımcı başka bir kaynak eklemek:

cronKullanıcı farklı sahiptir $PATHsenden daha:

Kullanıcıların crontabgirişlerde sıkça karşılaştığı bir sorun , giriş yapmış bir kullanıcı olarak yaptıklarından cronfarklı bir şekilde çalıştığını unutmalarıdır environment. Örneğin, bir kullanıcı $HOMEdizinde bir program veya komut dosyası oluşturur ve çalıştırmak için aşağıdaki komutu girer:

$ ./certbot ... 

Komut, komut satırından kusursuz biçimde geçiyor. Kullanıcı daha sonra bu komutu kendisine ekler crontab, ancak bunun işe yaramayacağını bulur:

*/10 * * * * ./certbot ....

Bu durumda hatanın nedeni ./, cronkullanıcının oturum açmış kullanıcı için olduğundan farklı bir konum olmasıdır . Yani, environmentfarklı! PATH, bir parçasıdır environmentve genellikle cronkullanıcı için farklıdır . Bu sorunu karmaşık hale getirmek environmentiçin cron, for * tüm * nix dağıtımları için aynı değildir ve çoklu sürümleri vardır.cron

Bu özel soruna basit bir çözüm, cronkullanıcıya crontabgirişte tam bir yol belirtimi vermektir :

0 22 * * * /path/to/certbot .....

cronKullanıcının nedir environment?

Bazı durumlarda, sistemimiz environmentiçin tam özellikleri bilmemiz crongerekebilir (veya sadece merak edebiliriz). Kullanıcı için nedir ve bizimkinden farklı olan nedir? environmentcronAyrıca, environmentbaşka bir cronkullanıcıyı bilmemiz gerekebilir - rootörneğin ... rootkullanıcının ne environmentkullanıyor cron? Bunu öğrenmenin bir yolu cronbize anlatmak istemek :

  1. Ana dizininizde ( ~/) aşağıdaki gibi bir kabuk komut dosyası oluşturun (veya seçtiğiniz düzenleyiciyle):
$ nano ~/envtst.sh
  1. Sisteminizi / kullanıcınızı ayarladıktan sonra editöre aşağıdakini girin:
#!/bin/sh 
/bin/echo "env report follows for user "$USER >> /home/you/envtst.sh.out 
/usr/bin/env >> /home/you/envtst.sh.out 
/bin/echo "env report for user "$USER" concluded" >> /home/you/envtst.sh.out
/bin/echo " " >> /home/you/envtst.sh.out
  1. Dosyayı kaydedin, editörden çıkın ve dosya izinlerini çalıştırılabilir olarak ayarlayın.
$ chmod a+rx ~/envtst.sh
  1. Yeni oluşturduğunuz komut dosyasını çalıştırın ve içindeki çıktıyı inceleyin /home/you/envtst.sh.out. Bu çıktı, şu anki ortamınızı $USERgiriş yaptığınız şekilde gösterecektir :
$ ./envtst.sh $$ cat /home/you/envtst.sh.out
  1. crontabDüzenlemek için açınız :
$ crontab -e -u root
  1. Altına aşağıdaki satırı girin crontab:
* * * * *  /home/you/envtst.sh >> /home/you/envtst.sh.err 2>&1

CEVAP: Çıktı dosyası "root cron user" için /home/you/envtst.sh.outbir liste içerecektir environment. Bunu öğrendikten sonra crontabgirişinizi uygun şekilde ayarlayın .

Girişimde ihtiyacım olan takvimi belirtemiyorum crontab:

İçin program girişi crontabelbette tanımlanmıştır man crontabve bunu okumalısınız. Ancak, man crontabtakvimi okumak ve anlamak iki farklı şeydir. Ve bir zamanlama belirtimindeki deneme yanılma çok sıkıcı olabilir. Neyse ki, yardımcı olabilecek bir kaynak var: crontab gurusu. . Program spesifikasyonunuzu girin; program sade İngilizce dilinde açıklanacaktır.

Son olarak, ve buradaki diğer cevaplardan biri ile gereksiz olma riski altındasınız, tek bir crontabgirişle sınırlı olduğunuzu düşünerek tuzağa düşmeyin, çünkü programlamak için bir işiniz var. crontabİhtiyacınız olan programı almak için ihtiyacınız olan sayıda girişi kullanmakta özgürsünüz .

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.