आप विंडोज पर साइगविन में क्रॉस्टैब कैसे चलाते हैं?


98

कुछ साइबर कमांड्स .exeफाइलें हैं, इसलिए आप उन्हें मानक विंडोज शेड्यूलर के साथ चला सकते हैं, लेकिन अन्य में .exeएक्सटेंशन नहीं है इसलिए डॉस से नहीं चलाया जा सकता है (ऐसा लगता है)।

उदाहरण के लिए मैं updatedbरात को दौड़ना चाहता हूं ।

मैं क्रॉन काम कैसे कर सकता हूं?

जवाबों:


91

आपको स्थापित करने की भी आवश्यकता है 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
ध्यान दें कि भले ही आप इसे अन्य खातों का उपयोग न करने के लिए कहें लेकिन यह अभी भी सेतुबंध (या कुछ और) का उपयोग करेगा और एक गुप्त और विरोधाभासी के साथ विफल होगा, can't switch user contextभले ही अन्य खातों का उपयोग करने के लिए स्पष्ट अनुरोध नहीं किया गया था। साइबरविन पर क्रोन के साथ खाता स्विचिंग जाहिर तौर पर MANDATORY है। आपको NO को स्वयं के रूप में चलाने के लिए कहना चाहिए ...
user3338098

और साइबरविन के क्रोन का एन विकल्प भी उतना ही निरर्थक है, जितना कि कोई भी बात नहीं कि सभी इवेंट्स में विंडोज इवेंट लॉग होता है। साइबर / क्रोन के हिस्से पर भयानक और भ्रामक प्रलेखन।
user3338098

1
युक्ति: croneventsघटनाओं को देखने के लिए कमांड का उपयोग करें (विंडोज़ सम लॉग से)। वे कभी नहीं खारिज कर रहे हैं, मैं हर कुछ महीनों में लॉग को prune करूंगा।
जीन पावलोवस्की

यहाँ कुछ विस्तारित डॉक्स हैं, कैसे सेटूइड
Holger Böhnke

71

आपके पास दो विकल्प हैं:

  1. Cgrgrunsrv का उपयोग करके क्रोन को एक विंडोज़ सेवा के रूप में स्थापित करें:

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

    ध्यान दें, क्रोन के (बहुत) पुराने संस्करणों में आपको -n के बजाय -D का उपयोग करने की आवश्यकता है

  2. 'नॉन .exe' फाइलें शायद स्क्रिप्ट को बैश करती हैं, इसलिए आप स्क्रिप्ट चलाने के लिए बैश को इनवाइट करके विंडो शेड्यूलर के जरिए चला सकते हैं, जैसे:

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

3
मुझे विशेष रूप से bash.exe विधि पसंद है। धन्यवाद।
बैरीपिकर

4
BTW, मुझे एक यूनिक्स-शैली पथ के रूप में पथ निर्दिष्ट करने की आवश्यकता थी - अद्यतित के लिए विंडोज़ कार्य शेड्यूलर के साथ शेड्यूल की गई मेरी पूरी कमांड ... c: \ cygwin \ bin \ bash.exe -l -c "/ usr / bin / अपडेटेड "
बैरीपिकर

2
मैं निश्चित रूप से इस उत्तर में विधि की सिफारिश करता हूं। मैं विंडोज़ 7 पर C: \ cygwin \ bin \ bash.exe -l -c "C: \ full-path \ to \ script.sh" का उपयोग करने में सक्षम था।
Jazzepi

2
अगर यह काम नहीं करता है, तो आप -D को -n से बदलना चाहते हैं: cygrunsrv -I cron -p / usr / sbin / cron -a -D
Benlitz

2
मैं cygrunsrv v1.62 का उपयोग कर रहा हूं और '-D' एक वैध विकल्प नहीं है, इसलिए सेवा शुरू होने के तुरंत बाद बाहर निकल जाती है। सेवा को स्वयं से बाहर निकलने से रोकने के लिए '-D' के बजाय '-n' का उपयोग किया जाना चाहिए।
ईकिन

23

हैट टिप http://linux.subogero.com/894/cron-on-cygwin/

साइबर-सेटअप शुरू करें और "व्यवस्थापक" श्रेणी से "क्रोन" पैकेज जोड़ें।

हम उपयोगकर्ता प्रणाली द्वारा सेवा के रूप में क्रोन चलाएंगे। इसलिए खराब सिस्टम को एक होम डायरेक्टरी और एक शेल की जरूरत होती है। "/ 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 -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

डोमेन उपयोगकर्ता : यह काम नहीं करता है। गरीब क्रोन मशीन पर डोमेन उपयोगकर्ताओं की ओर से निर्धारित कार्यों को चलाने में असमर्थ है। लेकिन एक और तरीका है: क्रोन सिस्टम लेवल क्रॉन टेबल में "/ etc / crontab" में पाया गया सामान भी चलाता है। इसलिए अपना दम वहां डालें, ताकि सिस्टम अपनी तरफ से ऐसा करे:

$ 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 प्रविष्टियों के बारे में कुछ शब्द। वे या तो पर्यावरण सेटिंग्स या अनुसूचित कमांड हैं। जैसा कि ऊपर देखा गया है, सिग्विन पर यह एक प्रयोग करने योग्य पथ बनाने के लिए सबसे अच्छा है। होम डायर और शेल आम तौर पर "/ etc / passwd" से लिए जाते हैं।

शेड्यूल किए गए कमांड के कॉलम में मैनुअल पेज को देखें।

यदि कुछ कोंट्राब प्रविष्टियां नहीं चलती हैं, तो सबसे अच्छा नैदानिक ​​उपकरण यह है:

$ cronevents

1
CYGWIN को ntsec पर सेट करने का कोई कारण नहीं है। यह अप्रचलित है। cygwin.com/cygwin-ug-net/use-cygwinenv.html
yam655

आप सिगविन को सिस्टम के रूप में कैसे चलाते हैं?
निकेन

यद्यपि हम विज्ञापन प्रमाणीकरण के साथ साइबरविन sshd का उपयोग करते हैं, मैं क्रॉन को उसी तरह से काम करने में असमर्थ था या पासवार्ड -R के साथ। मेरे लिए काम करने का एकमात्र तरीका था क्रोन को नामित उपयोगकर्ता के लिए एक सेवा के रूप में चलाना और इस उपयोगकर्ता के साथ सभी क्रोन कार्य करना। (
साइग्विन 2.8.0

7

बस यह जोड़ना चाहता था कि क्रोन के विकल्प बदल गए हैं। -D के बजाय -n पास करने की आवश्यकता है।

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

3

इस उत्तर से निर्देशों को लागू किया और इसने उत्तर की तरह अधिक कॉपी पेस्ट को इंगित करने के लिए काम किया (क्योंकि साइबरविन इंस्टॉलेशन प्रक्रिया एक तरह से एंटी-कॉपी-पेस्ट वार कार्यान्वित है)
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%

सुनिश्चित करें कि इंस्टॉलर प्रॉम्प्ट में कोई त्रुटि न फेंके ... अगर यह है - आपके पास शायद कुछ साइबर बिनरी चल रहे हैं या आप विंडोज एडमिन नहीं हैं, या कुछ अजीब बग ...

अब cmd प्रोम में:

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

या जो भी पूर्ण फ़ाइल पथ आप के लिए हो सकता है cygrunsrv.exe और cmd प्रॉम्प्ट में विंडो सेवा के रूप में क्रोन प्रारंभ करें

 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

set package_name = cygrunsrv क्रोन ने काम नहीं किया मुझे उन्हें अलग से स्थापित करना पड़ा। रखा जा रहा है "cygrunsrv: दिया पथ एक वैध निष्पादन योग्य की ओर इशारा नहीं करता"
लूट

सेवा शुरू नहीं होगी, लेकिन /var/log/cron.log में दिख रहा है कि -D को -n होना चाहिए। रनिंग "c: \ cygwin64 \ bin \ cygrunsrv.exe -R cron" और फिर "c: \ cygwin64 \ bin \ cygrunsrv.exe -I cron -p / usr / sbin / cron -a -n" इसे ठीक कर दिया।
लूट

1
cygrunsrv: एक सेवा स्थापित करने में त्रुटि: OpenSCManager: Win32 त्रुटि 5: प्रवेश निषेध है।
निकेन

3

मुझे पता चला कि जब मैंने विंडोज 7 पर लॉग इन किया तो साइगविन क्रोन सेवा अपने आप कैसे चल रही थी। यहाँ मेरे लिए क्या काम किया गया है:

नोटपैड का उपयोग करके, पहली पंक्ति और दूसरी पंक्ति (बिना उद्धरण के) पर C:\cygwin\bin\Cygwin_launch_crontab_service_input.txtसामग्री के साथ फ़ाइल बनाएं । ये आपके लिए दो प्रतिक्रियाएं हैं ।noyescron-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 देखें । BTW, यदि आप चाहें तो आप इन्हें वैकल्पिक रूप से स्टार्टअप में जोड़ सकते हैं:

Cygwin

XWin सर्वर

पहले वाला अमल करता है

C:\cygwin\Cygwin.bat

और दूसरा एक निष्पादित करता है

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

1

Windows सेवा के रूप में पास करने के लिए साइबरविन में क्रोन स्थापित करने का सही सिंटैक्स है, तर्क के रूप में -n पास करना और -D :

cygrunsrv - cron --path / usr / sbin / cron --args -n की स्थापना करें

-डॉगविन में क्रोन शुरू करते समय उपयोग त्रुटि देता है:

$

$ cygrunsrv - cron --path / usr / sbin / cron --args -D की स्थापना करें

$ साइग्रेन्स्रव -स्टार्ट क्रोन

cygrunsrv: एक सेवा शुरू करने में त्रुटि: QueryServiceStatus: Win32 त्रुटि 1062:

सेवा शुरू नहीं की गई है।

$ cat /var/log/cron.log

क्रोन: अज्ञात विकल्प - डी

उपयोग: / usr / sbin / cron [-n] [-x [ext, sch, proc, parc, load, misc, test, bit]

$

नीचे पृष्ठ की अच्छी व्याख्या है।

Windows में Cygwin Cron सेवा को स्थापित और कॉन्फ़िगर करना: https://www.davidjnice.com/cygwin_cron_nervice.html

PS मुझे Windows सेवा के रूप में क्रोन स्थापित करने के लिए व्यवस्थापक के रूप में अपने विंडोज 10 पीसी पर Cygwin64 टर्मिनल चलाना था ।


0
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.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.