Programing

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

crosscheck 2020. 10. 26. 07:42
반응형

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


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있지만, 평소와 같이, 모든에서 /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 버전을 선택할 수 있음).


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

it will give you a shell one-liner to register a new scheduled job with the already recommended launchd


On MacOSX, you have at least the following options:

From personal experience, cron is the most reliable. When I tested, launchd had a number of bugs and quirks. iCal alarms only run when you are logged in (but that might be something you prefer).


As Mecki pointed out, launchd would be the way to go with this. There's a GUI interface for launchd called Lingon that you might want to check out, as opposed to editing the launchd files by hand:

Lingon is a graphical user interface for creating an editing launchd configuration files for Mac OS X Leopard 10.5.

[snip...]

Editing a configuration file is easier than ever in this version and it has two different modes. Basic Mode which has the most common settings readily available in a very simple interface and Expert Mode where you can add all settings either directly in the text or insert them through a menu.


MAC OS has an Automator Tool which is same as that of Task Scheduler in windows. And using Automator you can schedule tasks on daily basis and link the task with recurring calendar event to run scripts on specified time daily. refer link to run scripts on daily basis in Mac OS


For apple scripts, I set up a special iCal calendar and use alarms to run them periodically. For command line tools, I use launchd.


FYI: while i do so miss it's siplicity, cron is a thing of the past on OS X. It was watchdog on panther. Since Tiger it has been launchd. So if you are running Leopard cron is not an option.

참고URL : https://stackoverflow.com/questions/132955/how-do-i-set-a-task-to-run-every-so-often

반응형