Как запустить crontab в Cygwin в Windows?

Некоторые команды cygwin являются .exe файлами, поэтому вы можете запускать их со стандартным планировщиком Windows, но у других нет расширения .exe, поэтому его нельзя запускать из DOS (похоже,).

Например, я хочу, чтобы updatedb выполнялся ночью.

Как сделать работу cron?

Ответ 1

Вам также нужно установить cygrunsrv, чтобы вы могли установить cron в качестве службы Windows, затем запустите cron-config.

Если вы хотите, чтобы задания cron отправляли электронную почту любого выхода, вам также нужно установить либо exim, либо ssmtp (перед запуском cron-config.)

Подробнее см. /usr/share/doc/Cygwin/cron-*.README.

Что касается программ без расширения .exe, они, вероятно, являются оболочечными сценариями какого-либо типа. Если вы посмотрите на первую строку файла, вы увидите, какую программу вам нужно использовать для их запуска (например, "#!/bin/sh" ), поэтому вы могли бы выполнить их из планировщика окон, вызвав программу оболочки (например, "C:\cygwin\bin\sh.exe -l /my/cygwin/path/to/prog".)

Ответ 2

У вас есть два варианта:

  • Установите cron в качестве службы Windows, используя cygrunsrv:

    cygrunsrv -I cron -p /usr/sbin/cron -a -D

    net start cron

  • Файлы "non.exe", вероятно, являются сценариями bash, поэтому вы можете запускать их через планировщик окон, вызывая bash для запуска script, например:

    C:\cygwin\bin\bash.exe -l -c "./full-path/to/script.sh"

Ответ 3

шляпный наконечник http://linux.subogero.com/894/cron-on-cygwin/

Запустите cygwin-setup и добавьте пакет "cron" из категории "Admin".

Хорошо запустить Cron как сервис от пользователя SYSTEM. Плохая СИСТЕМА, следовательно, нуждается в домашнем каталоге и оболочке. Файл "/etc/passwd" определит их.

$ mkdir /root
$ chown SYSTEM:root /root
$ mcedit /etc/passwd
SYSTEM:*:......:/root:/bin/bash

Запуск сервиса:

$ 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

Теперь локальные пользователи могут определять свои запланированные задачи следующим образом (crontab запустит ваш любимый редактор):

$ 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

Пользователи домена: не работает. Бедный cron не может запускать запланированные задачи от имени пользователей домена на машине. Но есть и другой способ: cron также запускает материал, найденный в таблице cron системного уровня в /etc/crontab. Поэтому вставьте туда свой суффикс, чтобы SYSTEM делал это от своего имени:

$ 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*

Напоследок несколько слов о записях в crontab. Это либо настройки среды, либо запланированные команды. Как видно выше, на Cygwin лучше всего создать пригодный для использования PATH. Home dir и shell обычно берутся из "/etc/passwd".

Что касается столбцов запланированных команд, см. Страницу руководства.

Если некоторые записи в crontab не запускаются, лучший диагностический инструмент это:

$ cronevents

Ответ 4

Просто хотел добавить, что параметры cron, похоже, изменились. Нужно пройти -n, а не -D.

cygrunsrv -I cron -p /usr/sbin/cron -a -n

Ответ 5

Я выяснил, как заставить службу Cygwin cron работать автоматически, когда я вошел в Windows 7. Вот что сработало для меня:

Используя Блокнот, создайте файл C:\cygwin\bin\Cygwin_launch_crontab_service_input.txt с контентом no в первой строке и yes на второй строке (без кавычек). Это ваши два ответа на подсказки для cron-config.

Создать файл C:\cygwin\Cygwin_launch_crontab_service.bat с контентом:

@echo off
C:
chdir C:\cygwin\bin
bash  cron-config < Cygwin_launch_crontab_service_input.txt

Добавьте ярлык к следующему в папке автозагрузки Windows: Cygwin_launch_crontab_service.bat

См. http://www.sevenforums.com/tutorials/1401-startup-programs-change.html, если вам нужна помощь в том, как добавить в Startup. BTW, вы можете добавить их в Startup, если хотите:

Cygwin

XWin Server

Первый выполняет

C:\cygwin\Cygwin.bat

а второй -

C:\cygwin\bin\run.exe /usr/bin/bash.exe -l -c /usr/bin/startxwin.exe

Ответ 6

Применил инструкции из этого ответа, и это сработало Просто чтобы указать больше копировать пасту, как ответ (потому что процедура установки cygwin является своего рода анти-копировать-вставить мудрым реализованы)
Нажмите кнопку "WinLogo", введите cmd.exe, щелкните правой кнопкой мыши, выберите "Начать как администратор". В приглашении cmd:

 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%

Убедитесь, что установщик не выбрасывает никаких ошибок в приглашении... Если у вас есть - у вас, вероятно, есть некоторые исполняемые файлы cygwin, или вы не администратор Windows, или какая-то причудливая ошибка...

Теперь в cmd promt:

 C:\cygwin64\bin\cygrunsrv.exe -I cron -p /usr/sbin/cron -a -D   

или любой полный путь к файлу, который может иметься для cygrunsrv.exe и запустите cron в качестве службы Windows в командной строке

 net start cron

Теперь в терминале bash   crontab -e

установите для входа cron пример ниже:

        #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

Ответ 7

Правильный синтаксис для установки cron в cygwin в качестве службы Windows - передать -n в качестве аргумента, а не -D:

cygrunsrv --install cron --path/usr/sbin/cron --args -n

-D возвращает ошибку использования при запуске cron в cygwin:

$

$ cygrunsrv --install cron --path/usr/sbin/cron --args -D

$ cygrunsrv --start cron

cygrunsrv: Ошибка запуска службы: QueryServiceStatus: Win32 ошибка 1062:

Служба не была запущена.

$ cat/var/log/cron.log

cron: неизвестный вариант - D

использование: /usr/sbin/cron [-n] [-x [ext, sch, proc, parc, load, misc, test, bit]]

$

Ниже на странице есть хорошее объяснение.

Установка и настройка службы Cygwin Cron в Windows: https://www.davidjnice.com/cygwin_cron_service.html

PS Я должен был запустить Cygwin64 Terminal на моем компьютере с Windows 10 в качестве администратора, чтобы установить cron в качестве службы Windows.

Ответ 8

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.