Como você executar um crontab no Cygwin no Windows?
Pergunta
Alguns comandos do cygwin são arquivos .exe
, para que possa executá-los com o do Windows Scheduler padrão, mas outros não têm uma extensão .exe
por isso não pode ser executado a partir do DOS (parece).
Por exemplo, eu quero updatedb
para executar todas as noites.
Como faço para tornar o trabalho cron?
Solução
Você precisa também instalar cygrunsrv
que você possa definir o cron-se como um serviço Windows, cron-config
em seguida, executar.
Se você quiser que os trabalhos do cron para enviar e-mail de qualquer saída que você também vai precisar instalar qualquer exim
ou ssmtp
(antes de executar cron-config
.)
Veja /usr/share/doc/Cygwin/cron-*.README
para mais detalhes.
Em relação programas sem uma extensão .exe
, provavelmente, são scripts shell de algum tipo. Se você olhar para a primeira linha do arquivo que você pudesse ver o programa que você precisa usar para executá-los (por exemplo, "#!/bin/sh
"), para que talvez pudesse executá-los a partir das janelas do programador chamando o programa de shell (por exemplo, "C:\cygwin\bin\sh.exe -l /my/cygwin/path/to/prog
".)
Outras dicas
Você tem duas opções:
-
Instale cron como um serviço Windows, usando cygrunsrv:
cygrunsrv -I cron -p /usr/sbin/cron -a -n net start cron
Note, no (muito) versões antigas do cron você precisa usar -D vez de -n
-
Os arquivos 'não .exe' são provavelmente bash scripts, para que possa executá-los através das janelas do programador invocando bash para executar o script, por exemplo:.
C:\cygwin\bin\bash.exe -l -c "./full-path/to/script.sh"
tip chapéu http://linux.subogero.com/894/cron- on-cygwin /
Inicie o cygwin-configuração e adicionar o pacote “cron” da categoria “Admin”.
Vamos executar cron como um serviço pelo sistema do usuário. portanto, pobres sistema precisa de um diretório home e uma concha. O arquivo “/ etc / passwd” vai defini-los.
$ mkdir /root
$ chown SYSTEM:root /root
$ mcedit /etc/passwd
SYSTEM:*:......:/root:/bin/bash
A iniciar o serviço:
$ cron-config
Do you want to remove or reinstall it (yes/no) yes
Do you want to install the cron daemon as a service? (yes/no) yes
Enter the value of CYGWIN for the daemon: [ ] ntsec
Do you want the cron daemon to run as yourself? (yes/no) no
Do you want to start the cron daemon as a service now? (yes/no) yes
usuários locais pode agora definir as suas tarefas programadas como este (crontab irá iniciar o seu editor favorito):
$ crontab -e # edit your user specific cron-table HOME=/home/foo
PATH=/usr/local/bin:/usr/bin:/bin:$PATH
# testing - one per line
* * * * * touch ~/cron
@reboot ~/foo.sh
45 11 * * * ~/lunch_message_to_mates.sh
Os usuários do domínio : ele não funciona. Pobre cron é incapaz de executar tarefas agendadas em nome dos usuários de domínio sobre a máquina. Mas há uma outra maneira: cron também corre o material encontrado na tabela cron nível do sistema em “/ etc / crontab”. Então, insira o seu suff lá, para que o sistema faz isso em seu próprio nome:
$ touch /etc/crontab
$ chown SYSTEM /etc/crontab
$ mcedit /etc/crontab
HOME=/root
PATH=/usr/local/bin:/usr/bin:/bin:$PATH
* * * * * SYSTEM touch ~/cron
@reboot SYSTEM rm -f /tmp/.ssh*
Finalmente, algumas palavras sobre as entradas crontab. Eles são ou configurações de ambiente ou comandos programados. Como visto acima, em Cygwin é melhor criar um caminho utilizável. Início dir e shell são normalmente tomadas a partir de “/ etc / passwd”.
Como para as colunas de comandos agendados consulte a página do manual.
Se determinadas entradas crontab não correr, a melhor ferramenta de diagnóstico é o seguinte:
$ cronevents
Só queria acrescentar que as opções para cron parece ter mudado. Necessidade de passar -n em vez de -D.
cygrunsrv -I cron -p /usr/sbin/cron -a -n
Aplicada as instruções do esta resposta e funcionou
Só para apontar um mais copiar e colar como resposta (porque o procedimento de instalação cygwin é uma espécie de anti-copy-paste sábio implementado)
Clique no botão WinLogo, tipo cmd, clique o botão direito, escolha "Iniciar como Administrador". Em cmd prompt:
cd <directory_where_i_forgot_the setup-x86_64.exe> cygwin installer:
set package_name=cygrunsrv cron
setup-x86_64.exe -n -q -s http://cygwin.mirror.constant.com -P %package_name%
Certifique-se o instalador não lançar quaisquer erros no prompt ... Se ele tem - você provavelmente tem alguns binários cygwin em execução ou você não é um administrador do Windows, ou algum bug estranho ...
Agora, em cmd promt:
C:\cygwin64\bin\cygrunsrv.exe -I cron -p /usr/sbin/cron -a -D
ou qualquer caminho completo do arquivo que você pode ter ao cygrunsrv.exe e iniciar o cron como serviço de janelas no cmd prompt de
net start cron
Agora, em festa ??strong> prazo de terminal crontab -e
configurar você cron entrada um exemplo abaixo:
#sync my gdrive each 10th minute
*/10 * * * * /home/Yordan/sync_gdrive.sh
# * * * * * command to be executed
# - - - - -
# | | | | |
# | | | | +- - - - day of week (0 - 6) (Sunday=0)
# | | | +- - - - - month (1 - 12)
# | | +- - - - - - day of month (1 - 31)
# | +- - - - - - - hour (0 - 23)
# +--------------- minute
Eu descobri como obter o serviço cron Cygwin executado automaticamente quando conectado ao Windows 7. Aqui está o que funcionou para mim:
Usando o bloco de notas, criar C:\cygwin\bin\Cygwin_launch_crontab_service_input.txt
arquivo com no
conteúdo na primeira linha e yes
na segunda linha (sem as aspas). Estas são as suas duas respostas para prompts para cron-config
.
Criar C:\cygwin\Cygwin_launch_crontab_service.bat
arquivo com conteúdo:
@echo off
C:
chdir C:\cygwin\bin
bash cron-config < Cygwin_launch_crontab_service_input.txt
Adicionar um atalho para o seguinte na pasta de inicialização do Windows:
Cygwin_launch_crontab_service.bat
http://www.sevenforums.com/tutorials/1401 -startup-programas-change.html se você precisar de ajuda sobre como adicionar a inicialização. BTW, você pode, opcionalmente, adicioná-los na inicialização se você gostaria:
Cygwin
XWin Servidor
Os executa primeiro um
C:\cygwin\Cygwin.bat
e executa a segunda
C:\cygwin\bin\run.exe /usr/bin/bash.exe -l -c /usr/bin/startxwin.exe
A sintaxe correta para instalar cron em cygwin como serviço do Windows é passar -n como argumento e não D :
cygrunsrv --install cron --path / usr / sbin / cron --args -n
D Erro de uso retorna ao iniciar cron em cygwin:
$
$ cygrunsrv --install cron --path / usr / sbin / cron --args -D
$ cygrunsrv --start cron
cygrunsrv: Erro ao iniciar um serviço: QueryServiceStatus: erro Win32 1062:
O serviço não foi iniciado.
$ cat /var/log/cron.log
cron: desconhecido opção - D
uso: / usr / sbin / cron [-n] [-x [ext, sch, proc, parc, carga, variado, teste, mordeu]]
$
Abaixo página tem uma boa explicação.
Instalação e Configuração do Cron Serviço Cygwin no Windows: https://www.davidjnice.com/cygwin_cron_service.html
PS eu tive que correr Cygwin64 Terminal no meu 10 PC Windows como administrador para instalar cron como serviço do Windows.
Getting updatedb to work in cron on Cygwin -- debugging steps
1) Make sure cron is installed.
a) Type 'cron' tab tab and look for completion help.
You should see crontab.exe, cron-config, etc. If not install cron using setup.
2) Run cron-config. Be sure to read all the ways to diagnose cron.
3) Run crontab -e
a) Create a test entry of something simple, e.g.,
"* * * * * echo $HOME >> /tmp/mycron.log" and save it.
4) cat /tmp/mycron.log. Does it show cron environment variable HOME
every minute?
5) Is HOME correct? By default mine was /home/myusername; not what I wanted.
So, I added the entry
"HOME='/cygdrive/c/documents and settings/myusername'" to crontab.
6) Once assured the test entry works I moved on to 'updatedb' by
adding an entry in crontab.
7) Since updatedb is a script, errors of sed and find showed up in
my cron.log file. In the error line, the absolute path of sed referenced
an old version of sed.exe and not the one in /usr/bin. I tried changing my
cron PATH environment variable but because it was so long crontab
considered the (otherwise valid) change to be an error. I tried an
explicit much-shorter PATH command, including what I thought were the essential
WINDOWS paths but my cron.log file was empty. Eventually I left PATH alone and
replaced the old sed.exe in the other path with sed.exe from /usr/bin.
After that updatedb ran to completion. To reduce the number of
permission error lines I eventually ended up with this:
"# Run updatedb at 2:10am once per day skipping Sat and Sun'
"10 2 * * 1-5 /usr/bin/updatedb --localpaths='/cygdrive/c' --prunepaths='/cygdrive/c/WINDOWS'"
Notes: I ran cron-config several times throughout this process
to restart the cygwin cron daemon.