Mavericks'te Cron betiği çalışmıyor


12

Bir kullanıcı crontab dosyasını aşağıdaki gibi yapılandırdım:

*/2 * * * * /Users/[my user]/Dropbox/htdocs/auto-update.sh

Ama idam edilmeyecek. 10-15 dakika bekledim. Neden?

El ile yürütüldüğünde, auto-update.sh komutu kolayca çalışır. İcra zincirini nasıl parçalayabilirim ve senaryomu cron'dan nasıl çalıştırabilirim?


1
Hangi işletim sistemini kullanıyorsunuz? Cron OS X'te kullanımdan kaldırıldı, bu yüzden daemon'u başlatmanız gerekebilir?
bmike

En son, 10.9.2. Nasıl yaparım? Mesela bir script'in her saat çalışmasını istiyorum. Yukarıdaki senaryoda çaresiz kaldım çünkü işe yaramadı ve her 2 dakikada bir çalışmak üzere değiştirdim.
RomaValcer

1
Bir crontab dosyası varsa, cron arka plan programı otomatik olarak başlatılmalıdır (değiştirilmesiyle, launchd). Bkz. /System/Library/LaunchDaemons/com.vix.cron.plist (özellikle KeepAliveve QueueDirectoriesöğeler).
Gordon Davisson

Tamam, Keeplive var, ancak listelenen sadece '/ etc / crontab' yolu yok. QueueDirectories'de '/ usr / lib / cron / tabs' adlı kısıtlı klasörde dosya var. Su ve vim ile açarken görevim var.
RomaValcer

Yanıtlar:


17

Bir cron işinin çalıştığı ortam, etkileşimli bir kabuktan biraz farklıdır; komut dosyasının çalışması muhtemeldir, ancak başarılı bir şekilde çalışmaz. En büyük farklardan biri, cron işleri için varsayılan PATH'ın yalnızca "/ usr / bin: / bin" olmasıdır, bu nedenle / usr / bin veya / bin'de olmayan komutları kullanırsanız, bunlar betiğinizin kendi PATH değerini ayarlamadığı veya komutlara açık yollar sağlamadığı sürece bulunur. Diğer büyük fark, etkileşimli bir oturuma bağlı olmamasıdır, bu nedenle etkileşimli bir şey yapmaya çalışırsa (terminalden okunur, vb.) Başarısız olur. Cron girişini şu şekilde değiştirmeyi deneyin:

*/2 * * * * /Users/[my user]/Dropbox/htdocs/auto-update.sh >>/tmp/auto-update.log 2>&1

... ve günlükte bilgilendirici bir şey görünüp görünmediğine bakın.


Bu benim çabamdan daha iyi - eğer cevabınızı daha iyi yaparsa logger fikrimi dahil etmekten çekinmeyin.
bmike

Günlük görünmedi.
RomaValcer

@RomaValcer: bu garip - bu senaryoyu başlatmak kadar bile ilerlemiyor. Çalıştırır ps -ax | grep [c]ronve cron daemon (/ usr / sbin / cron) çalışıp çalışmadığını listeler. Eğer öyleyse, bmike'ın logger testini deneyin. Her durumda, günlükleri (/var/log/system.log ve Konsol yardımcı programındaki "Tüm İletiler" öğesini) kontrol edin ve alakalı görünen bir şey olup olmadığına bakın.
Gordon Davisson

Evet, orada. Ancak günlükler, planlanan zamanda başlayan hiçbir şey göstermez.
RomaValcer

4

Söylemesi zor, ama ya her 5 dakikada bir yürütmek için ikinci bir cron işi eklediyseniz ve system.log'a iletileri kaydeden bazı sistem oluşturulmuş bir aracı çağırdıysanız?

0,5,10,15,20 * * * * /usr/bin/logger "cron is working"

Bu şekilde, söz konusu kullanıcı için cron'un çalıştığını bilirsiniz ve cron'u başlatmaya veya betiğinizi sınırlı cron ortamında çalışacak şekilde düzeltmeye odaklanabilirsiniz. (Duvar saatine bakabilir ve yakında ya da önümüzdeki birkaç dakika içinde birkaç kez seçebilirsiniz - örneğin, cron dosyasını çalıştırmak ve kaydetmek için dakikalar 35,36,37,38'de 12:34'te düzenleme .)


4

Bu soruyu sorduğunuz bir süredir, ancak bu konuya hiçbir çözüm gelmedi gibi görünüyor.

Bir kullanıcı-crontab oluşturma yönteminize bağlı olarak, bunu düzenledikten sonra yürütmek gerekebilir:

crontab ~/.yourcrontabfile

Yeni crontab'ın (değiştirdikten sonra da) etkinleştirilip etkinleştirilmediğini görmek için:

crontab -l

Bu işe yaramıyor. Crontab -l crons'ın kurulduğunu gösterir, ancak yine de çalışmaz.
PKHunter

1

Ben de aynı problemi yaşadım. Bas betiğinize yol eklemeniz gerekir:

#!/bin/sh
PATH=/usr/local/bin:/usr/local/sbin:~/bin:/usr/bin:/bin:/usr/sbin:/sbin

0

Ben de aynı problemi yaşadım. Crontab dosyamdaki işimden sonra yeni bir satır ekledikten sonra kayboldu (Toplam crontab n00b'im, bu nedenle bu davranışın yaygın olarak bilinip bilinmediği hakkında hiçbir fikrim yok).

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.