O trabalho do Cron não está salvando

5

Estou tentando escrever uma tarefa cron muito básica, mas não parece estar salvando. Aqui está o que eu fiz:

1) crontab -e

Isso abre um arquivo com o vim.

2)

#!usr/bin/env python

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

3) :wq

4) crontab -l

Nada aparece e recebo esta mensagem:

crontab: no crontab for ben 

Eu olhei em volta e a maioria das pessoas com problemas semelhantes teve problemas com o editor. Meu crontab abre corretamente com o vim, então esse não parece ser o problema.

Alguma ideia de por que isso pode não estar funcionando / salvando adequadamente?

Obrigado bclayman

Edite para incluir:

    
por bclayman 14.06.2015 / 04:15

3 respostas

8

Por algum motivo, /usr/bin/vi não está funcionando corretamente na sua máquina, como você pode ver na mensagem de erro:

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

O que aconteceu lá é que quando você deixa vi está produzindo um código de erro. Quando crontab vê que vi saiu com um código de erro, ele não confiará no conteúdo do arquivo vi que estava editando e simplesmente não fará alterações no seu crontab.

Você pode tentar investigar melhor por que vi não está funcionando ou, se preferir, pode usar um editor completamente diferente. Por exemplo, se você preferir usar vim , você pode digitar:

EDITOR=/usr/bin/vim crontab -e

Como alternativa, você pode manter a versão "oficial" do seu crontab em seu diretório pessoal. Em seguida, edite a versão em seu diretório inicial e, finalmente, instale-a usando:

crontab filename
    
por 14.06.2015 / 19:15
1

Dependendo do seu sistema, os crontabs do usuário são salvos em /var/spool/cron/ . Verifique se você tem esse diretório. Também o programa crontab é setuid então você não pode ler crontabs de outras pessoas, então verifique isso (-rw s ...):

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

Seu vim parece sair com um código de erro. Tente colocar sua entrada em um arquivo "myfile" e, em seguida, use crontab myfile para instalá-lo. Você pode receber mensagens de erro mais significativas.

Além disso, para executar o crontab, você pode precisar do arquivo /etc/cron.deny para existir (geralmente está vazio). Se não receber uma mensagem de erro.

Seu #! linha não vai funcionar, como @ G-Man disse nos comentários. Você precisa de algo como

0 23 * * 0 python ~/Desktop/SquashScraper/helpfulFunctions.py
    
por 14.06.2015 / 10:31
1

Não darei uma resposta para a pergunta original aqui, mas se você estiver tentando agendar tarefas para Mac OS 10.9 + com cron , você está fazendo isso errado : crontab está obsoleto. Você deve usar launchctl com launchd ( página de manual aqui ) em vez disso.

launchd / launchctl funciona com .plist arquivos que descrevem cada tarefa, da mesma forma que você usa systemd / systemctl com .service arquivos. Pode ser inquietante no início, mas é realmente fácil de usar, embora seja menos conveniente do que usar cron com um único crontab -e .

Felizmente, há muitos softwares GUI disponíveis para gerenciar facilmente launchd tarefas. Meu favorito pessoal é Controle de Lançamento da soma-zone. São 10 $, mas você pode baixar e usar o software deles sem limitações.

De qualquer forma, no seu caso, aqui está como o arquivo ~/Library/LaunchAgents/HelpfulFunctionsJob.plist deve ser:

<?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>

Apenas certifique-se de alterar <string>/Users/bclayman/Desktop/SquashScraper/helpfulFunctions.py</string> para seu caminho real e, em seguida, para carregar o trabalho:

launchctl load -w ~/Library/LaunchAgents/HelpfulFunctionsJob.plist
    
por 14.06.2015 / 20:06

Tags