[macos] 자주 실행되도록 작업을 어떻게 설정합니까?

30 분마다 스크립트를 실행하려면 어떻게해야합니까? OS마다 다른 방법이 있다고 가정합니다. OS X를 사용하고 있습니다.



답변

launchd를 사용하십시오 . 매우 강력한 실행기 시스템이며 동시에 Mac OS X 용 표준 실행기 시스템입니다 (현재 OS X 버전은 그것 없이는 부팅조차 할 수 없습니다). 익숙하지 않은 사람들을 위해 launchd(또는 일반적으로 OS X 포함), 그것은 사이의 잡종처럼 init, cron, at, SysVinit에서 ( init.d), inetd, upstartsystemd. 이 모든 프로젝트의 개념을 빌리면서 다른 곳에서는 찾을 수없는 것들을 제공합니다.

모든 서비스 / 작업은 파일입니다. 파일의 위치는 “이 서비스를 언제 실행해야합니까?”라는 질문에 따라 다릅니다. 및 “서비스에 필요한 권한은 무엇입니까?”

시스템 작업으로 이동

/Library/LaunchDaemons/

사용자가 시스템에 로그인했는지 여부에 관계없이 실행되는 경우. “루트”권한으로 시작됩니다.

경우에 그들은 단지 실행해야하는 경우 모든 사용자가 로그인, 그들로 이동

/Library/LaunchAgents/

방금 로그인 한 사용자의 권한으로 실행됩니다.

경우에 그들은 단지 실행해야하는 경우 사용자가 로그인, 그들은로 이동

~/Library/LaunchAgents/

여기서 ~는 홈 디렉토리입니다. 이 작업은 마치 명령 줄로 직접 시작했거나 Finder에서 파일을 두 번 클릭하여 사용자 권한으로 실행됩니다.

/System/Library/LaunchDaemons및 도 존재 /System/Library/LaunchAgents하지만 평소와 같이 아래에있는 모든 것은 /SystemOS 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 버전을 선택할 수 있음).


답변

매우 편리한 plist 생성기를 사용할 수 있습니다 : http://launched.zerowidth.com/ (아무것도 살 필요가 없습니다…)

그것은 쉘 당신에게 이미 추천으로 새 예약 된 작업 등록을 한 줄 줄 것이다 launchd에를


답변

MacOSX에는 최소한 다음 옵션이 있습니다.

  • “스크립트 실행”동작으로 반복되는 iCal 알람
  • 시작
  • cron ( link1 , link2 )

개인적인 경험으로 볼 때 cron이 가장 신뢰할 수 있습니다. 내가 테스트했을 때 launchd에는 많은 버그와 단점이있었습니다. iCal 알람은 로그인 할 때만 실행됩니다 (하지만 선호하는 것일 수 있음).


답변

Mecki가 지적했듯이 launchd는 이것으로 갈 수있는 방법이 될 것입니다. 실행 된 파일을 수동으로 편집하는 것과 달리 체크 아웃 할 수있는 Lingon 이라는 launchd 용 GUI 인터페이스 가 있습니다.

Lingon은 Mac OS X Leopard 10.5 용 편집 실행 구성 파일을 만들기위한 그래픽 사용자 인터페이스입니다.

[한조각…]

이 버전에서는 구성 파일 편집이 그 어느 때보 다 쉬워졌으며 두 가지 모드가 있습니다. 매우 간단한 인터페이스에서 가장 일반적인 설정을 쉽게 사용할 수있는 기본 모드와 모든 설정을 텍스트에 직접 추가하거나 메뉴를 통해 삽입 할 수있는 전문가 모드입니다.


답변

MAC OS에는 Windows 의 Task Scheduler 와 동일한 Automator Tool이 있습니다. 또한 Automator를 사용하면 매일 작업을 예약하고 반복 일정 이벤트와 작업을 연결하여 매일 지정된 시간에 스크립트를 실행할 수 있습니다. Mac OS에서 매일 스크립트를 실행하려면 링크 참조하십시오.


답변

애플 스크립트의 경우 특별한 iCal 캘린더를 설정하고 알람을 사용하여 주기적으로 실행합니다. 명령 줄 도구의 경우 launchd를 사용합니다.


답변

참고 : 간결함을 그리워하지만 cron은 OS X에서 과거의 일입니다. 팬더에 대한 감시자였습니다. Tiger 이후 출시되었습니다. 따라서 Leopard를 실행하는 경우 cron은 옵션이 아닙니다.