Frage

Einige Cygwin-Befehle sind .exe Dateien, so können Sie diese mit dem Standard-Windows-Scheduler laufen, aber andere haben keine .exe Erweiterung so kann nicht von DOS ausgeführt werden (wie es scheint).

Zum Beispiel möchte ich updatedb jede Nacht laufen zu lassen.

Wie kann ich cron Arbeit machen?

War es hilfreich?

Lösung

Sie müssen auch cygrunsrv installieren, so dass Sie cron up als Windows-Dienst einstellen, dann führen cron-config.

Wenn Sie die Cron-Jobs wollen E-Mail von jeder Ausgabe senden werden Sie auch entweder exim oder ssmtp installieren müssen (vor cron-config ausgeführt wird.)

Siehe /usr/share/doc/Cygwin/cron-*.README für weitere Details.

In Bezug auf Programme ohne .exe Erweiterung, sind sie wahrscheinlich Shell-Skripte von irgendeiner Art. Wenn Sie in der ersten Zeile der Datei sehen konnte man sehen, welches Programm müssen Sie sie ausführen (zB „#!/bin/sh“), so dass man sie vielleicht aus dem Fenster Scheduler durch den Aufruf der Shell-Programm ausführen kann (zB „C:\cygwin\bin\sh.exe -l /my/cygwin/path/to/prog “.)

Andere Tipps

Sie haben zwei Möglichkeiten:

  1. Installieren cron als Windows-Dienst, mit cygrunsrv:

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

    Beachten Sie, in (sehr) alte Versionen von cron müssen Sie verwenden -D statt -n

  2. Die ‚nicht .exe‘ -Dateien sind wahrscheinlich Bash-Skripte, so dass Sie sie über den Windows Scheduler laufen kann durch bash Aufruf das Skript auszuführen, z.

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

http://linux.subogero.com/894/cron- on-cygwin /

Starten

das Cygwin-Setup und fügen Sie das „cron“ Paket von der „Admin“ Kategorie.

Wir werden Cron als Dienst vom Benutzer SYSTEM ausgeführt. Schlechtes SYSTEM muss daher ein Home-Verzeichnis und eine Shell. Die Datei „/ etc / passwd“ Datei wird sich definieren.

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

Der starten Sie den Dienst:

$ 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

Lokale Benutzer können nun ihre geplanten Aufgaben wie diese definieren (crontab Ihre Lieblings-Editor starten):

$ 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

Domain-Benutzer : es funktioniert nicht. Schlechte cron ist nicht in der Lage zu geplanten Aufgaben im Auftrag des Domain-Benutzers auf der Maschine laufen. Aber es ist eine andere Art und Weise: cron läuft auch in der Systemebene cron-Tabelle gefunden Sachen in der Datei „/ etc / crontab“. So geben Sie Ihre ausr dort, so dass SYSTEM tut es in seinem eigenen Namen:

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

Schließlich ein paar Worte über crontab Einträge. Sie sind entweder Umgebungseinstellungen oder geplante Befehle. Wie oben gesehen, auf Cygwin ist es am besten ein brauchbares PATH zu erstellen. Home-Verzeichnis und Shell werden in der Regel aus „/ etc / passwd“.

Wie zu den Spalten der geplanten Befehle die manuelle Seite.

Wenn bestimmte crontab Einträge werden nicht ausgeführt, ist die beste Diagnose-Tool ist dies:

$ cronevents

Ich wollte nur hinzufügen, dass die Optionen scheinen zu cron geändert zu haben. Müssen Sie passieren -n statt -D.

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

angewendet, um die Anweisungen von diese Antwort und es funktionierte Nur um eine Kopie pastöse Antwort darauf hin, (weil Cygwin Installation Art von Anti-Copy-Paste ist weise implementiert)
Klicken Sie WinLogo button, geben Sie cmd.exe der rechten Maustaste darauf, wählen Sie "Start als Administrator". In cmd Eingabeaufforderung:

 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%

Stellen Sie sicher, das Installationsprogramm wirft keine Fehler in der Eingabeaufforderung ... Wenn ja - Sie wahrscheinlich einige Cygwin Binaries laufen haben oder Sie sind kein Windows-Server-Betreiber oder ein ausgeflippt Bug ...

Jetzt in cmd promt:

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

oder was auch immer vollständigen Dateipfad Sie könnten zum cygrunsrv.exe haben und Starten Sie den cron als Windows-Dienst in der Befehlszeile

 net start cron

Jetzt in bash Terminal Lauf      crontab -e

einrichten Sie cron-Eintrag ein Beispiel unten:

        #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

ich herausgefunden, wie die Cygwin cron Dienst erhalten läuft automatisch, wenn ich auf Windows 7. Hier angemeldet ist, was für mich gearbeitet:

Mit dem Editor, Datei C:\cygwin\bin\Cygwin_launch_crontab_service_input.txt mit Inhalt no in der ersten Zeile und yes in der zweiten Zeile (ohne die Anführungszeichen) erstellen. Dies sind Ihre beiden Antworten für cron-config zu aufgefordert werden.

Datei erstellen C:\cygwin\Cygwin_launch_crontab_service.bat mit Inhalt:

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

Sie eine Verknüpfung auf die folgenden in den Windows-Autostart-Ordner hinzufügen: Cygwin_launch_crontab_service.bat

Siehe http://www.sevenforums.com/tutorials/1401 -startup-Programme-change.html , wenn Sie Hilfe benötigen, wie man Startup hinzuzufügen. BTW, können Sie optional diese in Startup hinzufügen, wenn Sie möchten:

Cygwin

Xwin Server

Die erste führt

C:\cygwin\Cygwin.bat

und die zweite ausführt

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

Die korrekte Syntax cron in Cygwin installieren als Windows-Dienst ist passieren -n als Argument und nicht D :

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

D gibt Syntaxfehler beim Starten cron in Cygwin:

$

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

$ cygrunsrv --start cron

cygrunsrv: Fehler beim Start eines Dienstes: Query: Win32-Fehler 1062:

Der Dienst wird nicht gestartet.

$ cat /var/log/cron.log

cron: unbekannt Option - D

Nutzung: / usr / sbin / cron [-n] [-x [ext, sch, proc, parc, Last, misc, Test, Bit]]

$

Unter Seite hat eine gute Erklärung.

Installation & Konfiguration des Cygwin Cron-Dienst in Windows: https://www.davidjnice.com/cygwin_cron_service.html

PS Ich musste laufen Cygwin64 Klemme auf meinem Windows 10 PC als Administrator zu installieren, um cron als Windows-Dienst.

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.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top