시작 / 로그인시 명령 실행 (Mac OS X)


48

나는이 파일을 시작시 실행할 수 있도록 bash 명령을 배치해야하는 파일을 궁금해했다.

# Start the MongoDB server
/Applications/MongoDB/bin/mongod --dbpath /usr/local/mongo/data --fork --logpath /usr/local/mongo/log

나는 그물을 샅샅이 뒤졌으며 그 사이라고 생각한다. ~/.bashrc, ~/profile, /etc/bashrc, /etc/profile 또는 ~/.bash_profile. 나는 이것들을 시험해 보았지만 그들이 달려 나가는 것처럼 보였다. 터미널 시작 아니 Mac 시작 . 파일이 누락 되었습니까?

답변:


31

공식적으로 이들 중 누구도. 애플이 제안한 방법은 발사 된 . 이걸 설정하는 사람은 다음을 포함합니다. 잉곳 실행 제어

~ / .bashrc, ~ / profile, ~ / .bash_profile에있는 파일은 터미널을 통해 로그인 할 때만 시작됩니다. / etc에있는 것들은 홈 디렉토리에있는 것보다 이전에 모든 사용자를 위해 시작하는 쉘에 의해 실행되지만 사용자 로그인이 이루어질 때만 실행됩니다. 배쉬 매뉴얼

유닉스 시작 스크립트는 / etc / rc *와 관련이 있지만, OSX는 launchd 파일을 사용한다.


1
따라서 내 명령이 다음 파일 중 하나에 삽입 된 경우 /etc 부팅시 실행해야합니까? 그것이 무엇인지에 상관이 있습니까?
Wolfy87

1
/etc/bashrc 등등은 쉘을 시작할 때 실행됩니다. ~/.bashrc - 전자는 언제든지 실행됩니다. 어떤 사용자는 사용자가 아닌 셸을 시작합니다.
Scott

@ 스캇이 맞습니다. 내 대답을 수정했습니다.
Mark

3
좋아,하지만 난 그냥 launchd를 사용하는 방법을 알아낼 수 없어, 내 프로그램을위한 plist 파일을 만들려고했는데 그것을 실행하는 방법이나 부팅시 실행하는 방법을 모르겠다.
Wolfy87

1
@ launchd에 대한 마크 링크가 깨졌습니다.
Artem

55

OS X에서 시작시 명령을 실행하려면 다음을 사용해야합니다. launchd.

당신이 사용하고 싶지 않다면 Lingon , 당신은 launchd 속성 목록. 이 파일은 XML 파일이므로 좋아하는 텍스트 편집기를 사용하거나 Mac OS X Dev Tools와 함께 설치된 속성 목록 편집기를 사용할 수 있습니다. 다음을 작성하십시오.

<?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>some.meaningful.name</string> <!-- org.mongodb.mongodb perhaps? -->

    <key>OnDemand</key>
    <false/>

    <key>UserName</key>
    <string>anAppropriateUser</string>

    <key>GroupName</key>
    <string>anAppropriateGroup</string>

    <key>ProgramArguments</key>
    <array>
            <string>/Applications/MongoDB/bin/mongod</string>
            <string>--dbpath</string>
            <string>/usr/local/mongo/data</string>
            <string>--fork</string>
            <string>--logpath</string>
            <string>/usr/local/mongo/log</string>
    </array>
</dict>
</plist>

이걸 저장해라. /Library/LaunchAgents/some.meaningful.name.plist (관리자 계정 및 / 또는 sudo ) 다음 터미널을 열고 다음을 수행하십시오.

sudo launchctl load /Library/LaunchAgents/some.meaningful.name.plist

그러면 launchd가 항목을로드하게되어 부팅시 MongoDB가 시작됩니다. 보너스로, launchd 어떤 이유로 든 종료되면 다시 시작됩니다. 항목을 제거하려면 위 명령에서 load를 언로드로 바꾸십시오.


1
이 페이지 ( developer.apple.com/library/mac/documentation/Darwin/Reference/... ) launchd가 실행해서는 안되는 많은 것들을 나열합니다. 시작할 때 임의의 명령을 실행하고 싶다면 제어 할 수 없기 때문에 명령이 이러한 일을 할 수 있습니다. 또한 launchd를 다시 시작하지 않아도되고 일회용이거나 다시 시작하기 때문에 중단되는 항목을 원하지 않을 수도 있습니다. 이 경우 어떻게해야합니까?
Michael

@ 스콧, 고마워. 인터넷에서 찾은 가장 유용한 답변입니다.
Dmitriy

4
이렇게하면 10 초마다 응용 프로그램이 실행되고 죽지 않는 서비스에 적합합니다. 이 스크립트가 정시에 한 번 실행되는 경우 (제 경우에는 재부팅시 한 번 슬랙하기 만하면됩니다) <key>LaunchOnlyOnce</key><true/> 딕트에게.
msanford

샌포드 대단한 포인트. 포기하지 않는 launchd는 대용량의 로그 파일을 생성하여 Mac을 느리게 만듭니다 (대용량 로그 파일을 계속 읽고 쓰는 경우). 내 컴퓨터에서 실행되는 잘못 작성된 상업용 소프트웨어 중 일부에서이 수정 프로그램을 사용할 수 있습니다.
Foliovision

자체에 대한 참고 사항 : 환경 변수가 필요한 경우 : serverfault.com/questions/111391/...
Quandary

45

스택 오버플로에서 또 다른 간단한 솔루션 : 할 수있는 일 :

  • Automator.app를 시작하십시오.
  • "응용 프로그램"을 선택하십시오.
  • 툴바에서 "라이브러리 표시"를 클릭하십시오 (숨겨진 경우).
  • "쉘 스크립트 실행"을 추가하십시오 (Actions / Utilities에서).
  • 스크립트를 창에 복사하여 붙여 넣으십시오.
  • 그것을 시험하십시오;
  • 파일을 어딘가에 저장하십시오. your_name.app 창조 될 것이다);
  • MacOSX 버전에 따라
    • 늙은 버전 : 시스템 환경 설정 → 계정 → 로그인 항목으로 이동하거나
    • 새로운 버전 : 시스템 환경 설정 → 사용자 및 그룹 → 로그인 항목 (오른쪽 상단)으로 이동하십시오.
  • 이 새로 만든 앱을 추가하십시오.

로그 오프하고 다시 로그인하면 작업을 완료해야합니다. ;)


2
테스트를 거쳤으며 작동하기 때문에 번거로운 plist 편집이나 Lingon 앱 지불이 필요하지 않습니다.
Lukasz

4
그러나 3 줄 셸 스크립트에 약 1804k의 상용구를 추가합니다!
android.weasel

1
Automator에서 유용한 것을 만드는 것에 대한 자세한 지침을 주셔서 감사합니다. 이것은 하나의 작업만으로는 도움이되지 않습니다. 친절하게 제이미에게 감사드립니다. Turbo Boost Switcher를 통해 Turbo Boost를 끄는 데 사용하고 있습니다. 나는 유료 버전을 소유하고 있지만 라이선스 매커니즘은 잠에서 깨어날 때마다 관리자 비밀번호 요청을 피하기 위해 터미널을 통한 실행이 필요한 무료 버전을 사용하기에 충분합니다.
Foliovision

1
@ android.weasel Geekarist의 답변보기 superuser.com/a/995564/255375
J.D.

수퍼 유저 - 풀 : - D, +1
Mukul Goel

25

로그인 할 때 명령을 실행하려면 다음을 수행하십시오.

  • 명령이 포함 된 텍스트 파일을 작성하십시오 (bash 스크립트).

    #!/bin/bash
    
    # Start the MongoDB server
    /Applications/MongoDB/bin/mongod --dbpath /usr/local/mongo/data --fork --logpath /usr/local/mongo/log
    
  • 이 파일을에 저장하십시오. ~/Library/Startup.cmd

  • Finder에서 파일을 두 번 클릭하여 테스트 할 수 있습니다.
  • 실행 파일로 만드십시오. chmod +x ~/Library/Startup.cmd
  • 이 파일을 시스템 환경 설정 & gt; 계정 & gt; 로그인 항목

3
가장 쉽고 쉬운 답변. 허용 된 솔루션보다 훨씬 쉽습니다. 시스템 환경 설정 & gt; 사용자 & amp; 그룹 & gt; 항목 로그인 ... (계정이 아님) ... 또한 파일이 아무 곳에 나있을 수 있으며 .cmd로 끝나지 않아도된다는 점에 유의하십시오. 그냥 chmod + x it.
foreyez

5
그러나 로그인 항목은 시스템 시동시가 아니라 로그인시 실행됩니다. 서버를 운영한다면 큰 차이가 있습니다.
not2savvy

당신은 맞습니다 @ not2savvy. 서버의 경우 @ Sridhar-Sarnobat의 답변을 권하고 싶습니다. @reboot. 그러나 내 대답은 그래픽 프로그램을 시작하는 것을 허용 할 것이기 때문에 그것이 유용하다고 생각합니다.
Geekarist

왜 끝나는가? cmd 대신에 sh?
Simin Jie

3

어떻게보아야할까요? launchdlaunchctl MacOS에서 작동합니다. 두 명령에 대한 맨 페이지를 읽는 것으로 시작할 수 있습니다. 그런 다음 내부를 들여다 볼 수 있습니다. /Library/LaunchAgents//Library/LaunchDaemons/ 응용 프로그램을 통해 다른 시간에로드 할 응용 프로그램을 설정하는 방법의 예는 launchctl 인터페이스.

여기에 예제가있다. 나는 당신을 더 도울지도 모른 Stack Overflow에 찾아 냈다.



0

나는이 문제에 대한 매우 간단한 유닉스 대답에 관심이 있었고 다른 곳에서 발견했다. 대지 . 다음은 솔루션의 요약입니다.

로그인 쉘의 표준은 항상 이름에 "profile"이있는 bash 구성 파일을 / etc / profile, ~ / .bash_profile, ~ / .bash_login 그리고 마지막으로 ~ / .profile 순으로 찾습니다. 로그인 셸이 종료되면 ~ / .bash_logout을 읽습니다.

제 경우에는 방금 ~ / .bash_profile을 만든 다음 Mac 터미널 응용 프로그램의 환경 설정을 열고 "Shell opens with"옵션을 / bin / bash로 기본 설정을 변경했습니다. 그게 전부 야. 깨끗하고 간단합니다.


변경 사항을 작성했습니다 ... 귀하의 의견에 감사드립니다.
markgp

-3

단자 열기

nano ~/.bash_profile

이 텍스트를 파일에 추가하십시오.

/Applications/MongoDB/bin/mongod --dbpath /usr/local/mongo/data --fork logpath /usr/local/mongo/log

3
이렇게하면 로그인 한 후 터미널 창을 여는 것으로 가정합니다.
Arjan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.