Wie Sie eine crontab in Cygwin unter Windows laufen?
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?
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:
-
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
-
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 /
Startendas 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.