Script Cron tidak mengeksekusi di Mavericks

12

Saya telah mengkonfigurasi file crontab pengguna sebagai berikut:

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

Tapi itu tidak akan dieksekusi. Saya menunggu, misalnya, 10-15 menit. Mengapa?

Perintah auto-update.sh berjalan dengan mudah jika dijalankan secara manual. Bagaimana saya bisa memecah rantai eksekusi dan menjalankan skrip saya dari cron?

RomaValcer
sumber
1
OS apa yang Anda jalankan? Cron sudah usang pada OS X jadi Anda mungkin perlu memulai daemon?
bmike
Terbaru, 10.9.2. Bagaimana saya melakukannya? Saya hanya ingin skrip berfungsi setiap jam, misalnya. Dalam skrip di atas saya putus asa karena tidak bekerja, dan memodifikasinya berfungsi setiap 2 menit.
RomaValcer
1
Daemon cron harus dimulai secara otomatis (dengan penggantiannya, launchd) jika ada file crontab. Lihat /Sistem/Library/LaunchDaemons/com.vix.cron.plist (terutama KeepAlivedan QueueDirectoriesitem).
Gordon Davisson
OK, Keeplive ada di sana, tetapi hanya path yang terdaftar ada '/ etc / crontab' yang tidak ada. Dalam QueueDirectories terdapat file dalam folder terbatas '/ usr / lib / cron / tabs'. Saat membukanya dengan su dan vim, ada tugas saya.
RomaValcer

Jawaban:

17

Lingkungan tempat cron menjalankan sedikit berbeda dari shell interaktif; kemungkinan skrip berjalan, tetapi tidak berhasil. Salah satu perbedaan terbesar adalah bahwa untuk pekerjaan cron, PATH default hanya "/ usr / bin: / bin", jadi jika Anda menggunakan perintah yang tidak ada di / usr / bin atau / bin, mereka tidak akan ditemukan kecuali skrip Anda menetapkan PATH-nya sendiri, atau menyediakan jalur eksplisit untuk perintah. Perbedaan besar lainnya adalah tidak terhubung ke sesi interaktif, jadi jika ia mencoba melakukan sesuatu yang interaktif (baca dari terminal, dll) itu akan gagal. Coba ubah entri cron ke:

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

... dan lihat apakah ada informasi informatif yang muncul di log.

Gordon Davisson
sumber
Ini lebih baik daripada usaha saya - jangan ragu untuk memasukkan ide logger saya jika itu membuat jawaban Anda lebih baik
bmike
Log tidak muncul.
RomaValcer
@RomaValcer: itu aneh - itu berarti bahkan tidak bisa meluncurkan skrip. Saya akan menjalankan ps -ax | grep [c]rondan melihat apakah ia mencantumkan daemon cron (/ usr / sbin / cron) berjalan. Jika ya, coba uji pencatat bmike. Dalam kasus apa pun, periksa log (/var/log/system.log dan item "Semua Pesan" di utilitas Konsol) dan lihat apakah ada yang tampak relevan.
Gordon Davisson
Ya, itu ada di sana. Tetapi log tidak menunjukkan apa pun yang dimulai pada waktu yang dijadwalkan.
RomaValcer
4

Sulit untuk mengatakannya, tetapi bagaimana jika Anda menambahkan tugas cron kedua untuk dieksekusi setiap 5 menit atau lebih dan membuatnya memanggil beberapa alat yang dibangun sistem yang mencatat pesan ke system.log?

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

Dengan begitu Anda akan tahu bahwa cron berjalan untuk pengguna yang dimaksud dan dapat fokus pada memulai cron atau memperbaiki skrip Anda sehingga berjalan di lingkungan cron yang terbatas. (Anda dapat melihat jam dinding dan memilih beberapa kali yang akan segera hadir atau bahkan beberapa menit berikutnya - mis. Pengeditan pada 12:34 masukkan 35,36,37,38 untuk menit-menit berjalan dan menyimpan file cron .)

bmike
sumber
4

Sudah lama Anda mengajukan pertanyaan ini, tetapi tampaknya tidak ada solusi yang muncul di utas ini.

Bergantung pada cara Anda membuat crontab-pengguna, mungkin perlu menjalankan ini setelah mengeditnya:

crontab ~/.yourcrontabfile

Untuk melihat apakah crontab baru (juga setelah memodifikasinya) telah diaktifkan, tanyakan:

crontab -l
Ben
sumber
Itu tidak berhasil. Crontab -l menunjukkan crons diatur, tetapi masih tidak berhasil.
PKHunter
1

Saya memiliki masalah yang sama. Anda perlu menambahkan path ke skrip bash Anda:

#!/bin/sh
PATH=/usr/local/bin:/usr/local/sbin:~/bin:/usr/bin:/bin:/usr/sbin:/sbin
Ivan Zhirkov
sumber
0

Saya memiliki masalah yang sama. Itu hilang setelah saya menambahkan baris baru setelah pekerjaan saya di file crontab saya (saya n00b total crontab, jadi saya tidak tahu apakah perilaku ini diketahui secara luas atau tidak).

RMD
sumber