30 분마다 스크립트를 실행하려면 어떻게해야합니까? OS마다 다른 방법이 있다고 가정합니다. OS X를 사용하고 있습니다.
30 분마다 스크립트를 실행하려면 어떻게해야합니까? OS마다 다른 방법이 있다고 가정합니다. OS X를 사용하고 있습니다.
답변:
launchd를 사용하십시오 . 매우 강력한 실행기 시스템이며 동시에 Mac OS X 용 표준 실행기 시스템입니다 (현재 OS X 버전은 그것 없이는 부팅조차 할 수 없습니다). 익숙하지 않은 사람들을 위해 launchd
(또는 일반적으로 OS X 포함), 그것은 사이의 잡종처럼 init
, cron
, at
, SysVinit에서 ( init.d
), inetd
, upstart
와 systemd
. 이 모든 프로젝트의 개념을 빌리면서 다른 곳에서는 찾을 수없는 것들을 제공합니다.
모든 서비스 / 작업은 파일입니다. 파일의 위치는 "이 서비스를 언제 실행해야합니까?"라는 질문에 따라 다릅니다. 및 "서비스에 필요한 권한은 무엇입니까?"
시스템 작업으로 이동
/Library/LaunchDaemons/
사용자가 시스템에 로그인했는지 여부에 관계없이 실행되는 경우. "루트"권한으로 시작됩니다.
경우에 그들은 단지 실행해야하는 경우 모든 사용자가 로그인, 그들로 이동
/Library/LaunchAgents/
방금 로그인 한 사용자의 권한으로 실행됩니다.
경우에 그들은 단지 실행해야하는 경우 사용자가 로그인, 그들은로 이동
~/Library/LaunchAgents/
여기서 ~는 홈 디렉토리입니다. 이 작업은 마치 명령 줄로 직접 시작했거나 Finder에서 파일을 두 번 클릭하여 사용자 권한으로 실행됩니다.
/System/Library/LaunchDaemons
및 도 존재 /System/Library/LaunchAgents
하지만 평소와 같이 아래에있는 모든 것은 /System
OS X에서 관리합니다. 수행중인 작업을 실제로 알지 않는 한 여기에 파일을 배치해서는 안됩니다. 파일을 변경해서는 안됩니다. 시스템 폴더를 뒤섞 으면 시스템을 사용할 수 없게 될 수 있습니다 (다시 부팅을 거부하는 상태가 될 수도 있습니다). 이 디렉토리는 Apple이 launchd
부팅 중에 시스템을 시작하고 실행하고, 필요에 따라 서비스를 자동으로 시작하고, 시스템 유지 관리 작업을 수행 하는 등의 작업을 배치하는 디렉토리 입니다.
모든 launchd
작업에는 plist 형식의 파일이 있습니다. 역 도메인 이름 표기법이 있어야합니다. 예를 들어 작업 이름을 지정할 수 있습니다.
com.example.my-fancy-task.plist
이 plist는 다양한 옵션과 설정을 가질 수 있습니다. 한 손에 하나씩 쓰는 것은 차선책입니다. 무료 도구 Lingon 을 사용하여 작업을 생성하는 것이 좋습니다. 이 도구는 무료 였지만 이제는 앱 스토어에서 5 달러, 앱 스토어가 아닌 버전으로 10 달러의 비용이 듭니다 (앱 스토어가 아닌 버전이 훨씬 더 강력하며 이미 비용을 지불 할 계획이라면 진지하게 앱 스토어가 아닌 버전을 구입하십시오. 버전). 프리웨어 또는 오픈 소스와 유사한 도구를 아는 사람이 있으면 댓글에 한 줄을 남겨주세요. 대신 그 도구를 추천하겠습니다 (여기에서 상용 소프트웨어에 대해 광고하고 싶지 않음).
예를 들어 다음과 같이 보일 수 있습니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example.my-fancy-task</string>
<key>OnDemand</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>/usr/local/bin/my-script.sh</string>
</array>
<key>StartInterval</key>
<integer>1800</integer>
</dict>
</plist>
이 에이전트는 1800 초마다 (30 분마다) 쉘 스크립트 /usr/local/bin/my-script.sh를 실행합니다. 또한 특정 날짜 / 시간에 작업을 실행하거나 (기본적으로 launchd는 cron이 할 수있는 모든 작업을 수행 할 수 있음) "OnDemand"를 비활성화하여 프로세스를 영구적으로 실행하도록 할 수도 있습니다 (종료되거나 충돌하는 경우 launchd가 즉시 다시 시작 함). . 프로세스가 사용할 수있는 리소스의 양을 제한 할 수도 있습니다 (이전에 말했듯이 Lingon은 이러한 모든 설정을 멋진 UI 인터페이스에 표시합니다).
업데이트 : 여전히 지원 되지만 OnDemand
더 이상 사용되지 않습니다. 새 설정의 이름 KeepAlive
은 훨씬 더 의미가 있습니다. 그것은 정반대 인 경우 부울 값을 가질 수있다 OnDemand
(로 설정 false
되는 경우와 같이 동작 OnDemand
이며 true
, 다른 방법으로 둥근). 새로운 기능은 부울 값 대신 사전 값을 가질 수도 있다는 것입니다. 사전 값이있는 경우 작업을 유지해야하는 상황에서보다 세부적으로 제어 할 수있는 몇 가지 추가 옵션이 있습니다. 예를 들어, 프로그램이 종료 코드 0으로 종료되는 한, 디스크의 특정 파일 / 디렉토리가 존재하는 한, 다른 작업도 활성 상태이거나 네트워크가 현재 작동중인 경우에만 활성 상태로 유지됩니다.
또한 명령 줄을 통해 수동으로 작업을 활성화 / 비활성화 할 수 있습니다.
launchctl <command> <parameter>
명령은로드 또는 언로드, plist를로드하거나 다시 언로드 할 수 있습니다.이 경우 매개 변수는 파일 경로입니다. 또는 명령은 시작 또는 중지가되어 이러한 작업을 시작하거나 중지 할 수 있습니다.이 경우 매개 변수는 레이블 (com.example.my-fancy-task)입니다. 다른 명령과 옵션도 있습니다.
plist 형식 및 launchctl
명령 줄 도구 에 대한 Apple의 설명서를 참조하십시오 (형식 / 옵션은 OS X 릴리스마다 다르므로 맨 위에서 OS X 버전을 선택할 수 있음).
StartCalendarInterval
는 키 Minute
와 값이 한 번 00
이고 한 번인 두 사전의 배열을 사용하여 30
요청한 것을 정확하게 수행합니다. 추후에 댓글이 아닌 질문으로 질문 해주시면 최종 사전도 보여 드릴 수 있습니다 (댓글로 할 수 없습니다). 이 사이트는 모두 질문에 관한 것입니다. 질문에 대한 힌트를 얻으려면 질문 자체가 아닌 질문에 대한 링크를 댓글로 게시하십시오.
매우 편리한 plist 생성기를 사용할 수 있습니다 : http://launched.zerowidth.com/ (아무것도 살 필요가 없습니다…)
그것은 쉘 당신에게 이미 추천으로 새 예약 된 작업 등록을 한 줄 줄 것이다 launchd에를
Mecki가 지적했듯이 launchd는 이것으로 갈 수있는 방법이 될 것입니다. 실행 된 파일을 수동으로 편집하는 것과 달리 체크 아웃 할 수있는 Lingon 이라는 launchd 용 GUI 인터페이스 가 있습니다.
Lingon은 Mac OS X Leopard 10.5 용 편집 실행 구성 파일을 만들기위한 그래픽 사용자 인터페이스입니다.
[한조각...]
이 버전에서는 구성 파일 편집이 그 어느 때보 다 쉬워졌으며 두 가지 모드가 있습니다. 매우 간단한 인터페이스에서 가장 일반적인 설정을 쉽게 사용할 수있는 기본 모드와 모든 설정을 텍스트에 직접 추가하거나 메뉴를 통해 삽입 할 수있는 전문가 모드입니다.
MAC OS에는 Windows 의 Task Scheduler 와 동일한 Automator Tool이 있습니다. 또한 Automator를 사용하면 매일 작업을 예약하고 반복 일정 이벤트와 작업을 연결하여 매일 지정된 시간에 스크립트를 실행할 수 있습니다. Mac OS에서 매일 스크립트를 실행하려면 링크 를 참조하십시오.
참고 : 간결함을 그리워하지만 cron은 OS X에서 과거의 일입니다. 팬더에 대한 감시자였습니다. Tiger 이후 출시되었습니다. 따라서 Leopard를 실행하는 경우 cron은 옵션이 아닙니다.
cron을 사용하여 작업을 예약 할 수 있습니다.
crontab -e
작업은 다음 형식으로 지정됩니다.
* * * * * command to execute
│ │ │ │ │
│ │ │ │ └─── day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0)
│ │ │ └──────── month (1 - 12)
│ │ └───────────── day of month (1 - 31)
│ └────────────────── hour (0 - 23)
└─────────────────────── min (0 - 59)
예:
0 12 * * * cd ~/backupfolder && ./backup.sh
크론 작업을 설치했으면 crontab -l을 사용하여 작업을 나열 할 수 있습니다.
crontab -l
cron 일정 표현식에 대해 더 알고 싶다면
https://crontab.guru https://ole.michelsen.dk/blog/schedule-jobs-with-crontab-on-mac-osx.html