답변:
또한 설치해야 cygrunsrv
cron을 Windows 서비스로 설정 한 다음 실행할 수 있습니다.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
") 을 호출하여 Windows 스케줄러에서 실행할 수 있습니다 . )
cronevents
명령을 사용 하여 이벤트를보십시오 (windows evengs 로그에서). 그들은 결코 버려지지 않으며 몇 달에 한 번씩 통나무를 정리합니다.
두 가지 옵션이 있습니다.
cygrunsrv를 사용하여 cron을 Windows 서비스로 설치합니다.
cygrunsrv -I cron -p /usr/sbin/cron -a -n
net start cron
(아주) 오래된 버전의 cron에서는 -n 대신 -D를 사용해야합니다.
'non .exe'파일은 아마도 bash 스크립트 일 것이므로 bash를 호출하여 스크립트를 실행하여 Windows 스케줄러를 통해 실행할 수 있습니다. 예 :
C:\cygwin\bin\bash.exe -l -c "./full-path/to/script.sh"
모자 팁 http://linux.subogero.com/894/cron-on-cygwin/
cygwin-setup을 시작하고 "Admin"범주에서 "cron"패키지를 추가합니다.
SYSTEM 사용자가 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은“/ etc / crontab”의 시스템 수준 cron 테이블에있는 것들을 실행합니다. 따라서 거기에 서프를 삽입하여 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를 만드는 것이 가장 좋습니다. 홈 디렉토리와 쉘은 일반적으로“/ etc / passwd”에서 가져옵니다.
예약 된 명령 열에 대해서는 매뉴얼 페이지를 참조하십시오.
특정 crontab 항목이 실행되지 않는 경우 가장 좋은 진단 도구는 다음과 같습니다.
$ cronevents
cron에 대한 옵션이 변경된 것처럼 추가하고 싶었습니다. -D가 아닌 -n을 전달해야합니다.
cygrunsrv -I cron -p /usr/sbin/cron -a -n
이 답변 의 지침을 적용하고 답변 과 같은 더 많은 복사 붙여 넣기를 지적하기 위해 작동
했습니다. 관리자로 시작 ". 에서는 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에 대한 전체 파일 경로와 cmd 프롬프트에서 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
Windows 7에 로그온 할 때 Cygwin cron 서비스를 자동으로 실행하는 방법을 알아 냈습니다. 다음은 저에게 효과적이었습니다.
메모장을 사용 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
보다 Startup에 추가하는 방법에 대한 도움이 필요하면 http://www.sevenforums.com/tutorials/1401-startup-programs-change.html을 하십시오 . BTW, 원하는 경우 Startup에서 선택적으로 추가 할 수 있습니다.
Cygwin
XWin 서버
첫 번째 실행
C:\cygwin\Cygwin.bat
두 번째는
C:\cygwin\bin\run.exe /usr/bin/bash.exe -l -c /usr/bin/startxwin.exe
cygwin에 Windows 서비스로 cron 을 설치하는 올바른 구문 은 -D가 아닌 -n 을 인수 로 전달하는 것입니다. .
cygrunsrv --install cron --path / usr / sbin / cron --args -n
-D 는 cron을 시작할 때 사용 오류를 반환합니다. cygwin에서 을 .
$
$ cygrunsrv --install cron --path / usr / sbin / cron --args -D
$ cygrunsrv-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]]
$
아래 페이지에는 좋은 설명이 있습니다.
Windows에서 Cygwin Cron 서비스 설치 및 구성 : https://www.davidjnice.com/cygwin_cron_service.html
추신 : cron 을 Windows 서비스 로 설치하려면 Windows 10 PC에서 Cygwin64 Terminal 을 관리자로 실행해야 했습니다.
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.
can't switch user context
명시 적으로 요청 했음에도 불구하고 seteuid (또는 다른 것)를 사용하고 모순적이고 모순적으로 실패 합니다. cygwin에서 cron으로 계정을 전환하는 것은 분명히 필수입니다. 자신으로 달리기를