Задача Cron не сохранять

Я пытаюсь написать очень базовое задание cron, но оно, похоже, не спасает. Вот что я сделал:

1) crontab -e

Это открывает файл с vim.

2)

 #!usr/bin/env python 0 23 * * 0 ~/Desktop/SquashScraper/helpfulFunctions.py 

3) :wq

4) crontab -l

Ничего не появляется, и я получаю это сообщение:

 crontab: no crontab for ben 

Я огляделся, и у большинства людей с подобными проблемами были проблемы с редакцией. Мой crontab открывается правильно с помощью vim, так что, похоже, это не проблема.

Любая идея, почему это может не работать / экономить должным образом?

Спасибо, bclayman

Изменить: введите описание изображения здесь

По какой-либо причине /usr/bin/vi работает неправильно на вашем компьютере, как вы можете сказать из сообщения об ошибке:

 crontab: "/usr/bin/vi" exited with status 1 

Случилось, что когда вы покидаете vi вы получаете код ошибки. Когда crontab видит, что vi вышел с кодом ошибки, он не будет доверять содержимому файла vi которое редактирует, и просто не вносит никаких изменений в ваш crontab.

Вы можете попытаться подробнее исследовать, почему vi не работает, или если вы предпочитаете, вы можете использовать совершенно другой редактор. Например, если вы предпочитаете использовать vim , вы можете ввести:

 EDITOR=/usr/bin/vim crontab -e 

В качестве альтернативы вы можете сохранить «официальную» версию вашего crontab под своим домашним каталогом. Затем отредактируйте версию под домашним каталогом и, наконец, установите ее, используя:

 crontab filename 

В зависимости от вашей системы пользовательские crontabs сохраняются в /var/spool/cron/ . Проверьте, есть ли у вас этот каталог. Кроме того, программа crontab – setuid, поэтому вы не можете читать чужие crontabs, поэтому проверьте это (-rw s …):

 $ ls -l /bin/crontab -rwsr-xr-x 1 root root 57536 Sep 18 2014 /bin/crontab 

Кажется, что ваш vim выходит с кодом ошибки. Попробуйте поместить свою запись в файл «myfile», а затем с помощью crontab myfile чтобы установить его. Вы можете получить более значимые сообщения об ошибках.

Кроме того, для запуска crontab вам может понадобиться файл /etc/cron.deny для существования (он обычно пуст). Если он не получает сообщение об ошибке.

Ваш #! строка не будет работать, как сказал @ G-Man в комментариях. Вам нужно что-то вроде

 0 23 * * 0 python ~/Desktop/SquashScraper/helpfulFunctions.py 

Я не буду отвечать на исходный вопрос здесь, но если вы планируете планировать задачи для Mac OS 10.9+ с cron , вы делаете это неправильно : crontab устарел. launchctl вы должны использовать launchctl с launchd ( man-страница здесь ).

launchctl / launchctl работает с файлами .plist которые описывают каждую задачу, подобно тому, как вы будете использовать systemd / systemctl с .service файлами. Сначала это может вызвать беспокойство, но на самом деле оно простое в использовании, хотя оно менее удобно, чем использование cron с одним crontab -e .

К счастью, доступно много программных средств GUI для легкого управления задачами launchd . Моим личным фаворитом является Launch Control соматической зоной. Это 10 $, но вы можете скачать и использовать их программное обеспечение без ограничений.


В любом случае, в вашем случае, вот что должно выглядеть ~/Library/LaunchAgents/HelpfulFunctionsJob.plist файл ~/Library/LaunchAgents/HelpfulFunctionsJob.plist :

 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>HelpfulFunctions.job</string> <key>Program</key> <string>/Users/bclayman/Desktop/SquashScraper/helpfulFunctions.py</string> <key>RunAtLoad</key> <true/> <key>StartCalendarInterval</key> <dict> <key>Hour</key> <integer>23</integer> <key>Minute</key> <integer>0</integer> <key>Weekday</key> <integer>7</integer> </dict> </dict> </plist> 

Просто не забудьте изменить <string>/Users/bclayman/Desktop/SquashScraper/helpfulFunctions.py</string> на ваш фактический путь, а затем, чтобы загрузить задание:

 launchctl load -w ~/Library/LaunchAgents/HelpfulFunctionsJob.plist