كيف يمكنك تشغيل crontab في Cygwin على نظام التشغيل Windows؟

StackOverflow https://stackoverflow.com/questions/707184

  •  22-08-2019
  •  | 
  •  

سؤال

بعض أوامر cygwin هي .exe الملفات، بحيث يمكنك تشغيلها باستخدام برنامج جدولة Windows القياسي، ولكن لا يوجد لدى الآخرين ملف .exe ملحق لذا لا يمكن تشغيله من DOS (على ما يبدو).

مثلا أريد updatedb لتشغيل ليلا.

كيف أجعل كرون يعمل؟

هل كانت مفيدة؟

المحلول

وتحتاج إلى تثبيت أيضا cygrunsrv حتى تتمكن من تحديد كرون يصل كخدمة النوافذ، ثم قم بتشغيل cron-config.

إذا كنت تريد وظيفة كرون لإرسال البريد الإلكتروني من أي إخراج ستحتاج أيضا إلى تثبيت إما exim أو ssmtp (قبل تشغيل cron-config).

وانظر /usr/share/doc/Cygwin/cron-*.README لمزيد من التفاصيل.

وفيما يتعلق ببرامج بدون ملحق .exe، وأنها ربما مخطوطات قذيفة من نوع ما. اذا نظرتم الى السطر الأول من الملف الذي يمكن أن ترى ما هو البرنامج تحتاج إلى استخدام لتشغيلها (على سبيل المثال، "#!/bin/sh")، لذلك يمكن أن ربما تنفيذها من جدولة النوافذ عن طريق استدعاء برنامج قذيفة (على سبيل المثال "، C:\cygwin\bin\sh.exe -l /my/cygwin/path/to/prog ").

نصائح أخرى

لديك خياران:

  1. قم بتثبيت cron كخدمة Windows باستخدام cygrunsrv:

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

    لاحظ أنه في الإصدارات القديمة (جدًا) من cron تحتاج إلى استخدام -D بدلاً من -n

  2. من المحتمل أن تكون الملفات "غير .exe" عبارة عن نصوص برمجية bash، لذا يمكنك تشغيلها عبر برنامج جدولة windows عن طريق استدعاء bash لتشغيل البرنامج النصي، على سبيل المثال:

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

طرف القبعة http://linux.subogero.com/894/cron-on-cygwin/

ابدأ إعداد cygwin وأضف الحزمة "cron" من فئة "Admin".

سنقوم بتشغيل cron كخدمة بواسطة نظام المستخدم.لذلك يحتاج النظام السيئ إلى دليل رئيسي وصدفة.سيحددها الملف "/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".لذا أدخل suff الخاص بك هناك، حتى يقوم 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 إنشاء مسار قابل للاستخدام.عادةً ما يتم أخذ dir وshell من "/etc/passwd".

أما بالنسبة لأعمدة الأوامر المجدولة، راجع صفحة الدليل.

إذا لم يتم تشغيل بعض إدخالات crontab، فإن أفضل أداة تشخيصية هي:

$ cronevents

وأردت فقط أن أضيف أن تبدو الخيارات لكرون قد تغيرت. تحتاج إلى تمرير -n بدلا من -D.

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

طبقت التعليمات من هذه الإجابة وقد نجحت فقط للإشارة إلى معجون أكثر مثل الإجابة (لأن إجراء تثبيت cygwin هو نوع من الحكماء المنقص للزواج)
انقر فوق الزر WinLogo، واكتب cmd.exe، ثم انقر بزر الماوس الأيمن عليه، واختر "البدء كمسؤول".في كمد اِسْتَدْعَى:

 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، أو بعض الأخطاء الفظيعة ...

في هذه اللحظة كمد موجه:

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

أو أي مسار ملف كامل قد يكون لديك إلى cygrunsrv.exe وبدء cron كخدمة Windows في موجه CMD

 net start cron

في هذه اللحظة سحق تشغيل المحطة 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. هنا هو ما عملت بالنسبة لي:

وعن طريق المفكرة، إنشاء ملف 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

وإضافة اختصار لما يلي في مجلد بدء التشغيل ويندوز: Cygwin_launch_crontab_service.bat

http://www.sevenforums.com/tutorials/1401 -startup-برامج change.html إذا كنت بحاجة إلى مساعدة حول كيفية إضافة إلى بدء التشغيل. راجع للشغل، يمكنك إضافة اختياريا هذه في بدء التشغيل إذا كنت ترغب:

وسيغوين

وXWin خادم

وأول واحد ينفذ

C:\cygwin\Cygwin.bat

والثانية واحد ينفذ

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

بناء الجملة الصحيح للتثبيت كرون في cygwin حيث سيتم تمرير خدمة Windows كحجة وليس :

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

إرجاع خطأ في الاستخدام عند البدء كرون في سيجوين:

$

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

$cygrunsrv --بدء كرون

سيجرونسرف:خطأ في بدء الخدمة:حالة خدمة الاستعلام:خطأ Win32 1062:

الخدمة لم تبدأ بعد.

$cat /var/log/cron.log

كرون:خيار غير معروف - د

الاستخدام:/usr/sbin/cron [-n] [-x [ext,sch,proc,parc,load,misc,test,bit]]

$

الصفحة أدناه لديها شرح جيد.

تثبيت وتكوين خدمة Cygwin Cron في نظام التشغيل Windows:https://www.davidjnice.com/cygwin_cron_service.html

ملاحظة. كان علي أن أركض محطة Cygwin64 على جهاز الكمبيوتر الذي يعمل بنظام Windows 10 كمسؤول من أجل التثبيت كرون كخدمة ويندوز.

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.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top