web-dev-qa-db-ja.com

起動時またはログイン時にコマンドを実行する(Mac OS X)

起動時に実行されるように、この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の起動。ファイルがありませんか?

50
Wolfy87

公式にはこれらのどれもありません。 Appleが提案した方法は、 launchd を使用することです。これを設定するには、 lingonコントロールを起動する

あなたが言及するファイルに関しては、ホームディレクトリ〜/ .bashrc、〜/ profile、〜/ .bash_profileにあるものは、あなたが端末を介してログインしたときにのみ開始されます。/etc内のものは、ホームディレクトリ内のものより前に、すべてのユーザーに対してシェルによって実行されます。ただし、ユーザーログインが行われる場合に限ります。 bash manual

Unixの起動スクリプトには/ etc/rc *が含まれていましたが、OSXの場合は単にlaunchdのものを使用してください。

32
Mark

OS X上で起動時にコマンドを実行するには、launchdを使用する必要があります。

Lingon を使用したくない場合は、launchdプロパティリストを作成する必要があります。これはXMLファイルなので、あなたの好きなテキストエディタでそれをすることができます、あるいはあなたはMac OS X Dev Toolsと一緒にインストールされるProperty List Editorを使うことができます。以下を作成してください。

<?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をunloadに置き換えるだけです。

56
Scott

スタックオーバーフローによるもう1つの簡単な解決方法

  • Automator.appを起動します。
  • 「アプリケーション」を選択してください。
  • ツールバーの[ライブラリを表示]をクリックします(非表示の場合)。
  • 「アクション/ユーティリティ」から「シェルスクリプトの実行」を追加します。
  • スクリプトをウィンドウにコピーアンドペーストします。
  • 試して;
  • どこかに保存してください。your_name.appというファイルが作成されます。
  • お使いのMacOSXのバージョンによっては
    • 旧バージョン:[システム環境設定]→[アカウント]→[ログイン項目]に移動します。
    • 新規バージョン:システム環境設定→ユーザーとグループ→ログイン項目(右上)に移動します。
  • この新しく作成したアプリを追加してください。

ログオフし、再度ログインすれば完了です。 ;)

46
Jaime M.

ログイン時にコマンドを起動するには、次のようにします。

  • あなたのコマンドを含むテキストファイルを作成します(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
  • このファイルをシステム環境設定>アカウント>ログイン項目に追加します。
25
Geekarist

あなたはlaunchdlaunchctlがどのようにMacOS上で動くのかを見なければならないでしょう。両方のコマンドのmanページを読むことから始めることができます。 launchctlインターフェースを介して異なる時間にロードするようにアプリケーションを設定する方法の例については、/Library/LaunchAgents/および/Library/LaunchDaemons/を参照してください。

これが例です。 私はStack Overflowで見つけました。

3
ayaz

LinuxとMac OS Xで動作するアプローチが必要な場合は、cronタスクで十分です(crontab -eを実行してcronタスクを編集します)。

@reboot /path/to/script

(クレジット: https://unix.stackexchange.com/questions/49207/how-do-i-set-a-script-that-it-will-run-on-start- up-in-freebsd

3

私はこの問題に対する非常に簡単なunixの回答に興味があり、それを他の サイト で見つけました。これが解決策の要約です。

ログインシェルの標準は、名前に "profile"を付けたbash設定ファイルを、/ etc/profile、〜/ .bash_profile、次に〜/ .bash_login、最後に〜/ .profileの順に探すことです。ログインシェルが終了すると、〜/ .bash_logoutが読み込まれます。

私の場合は、〜/ .bash_profileを作成した後、Mac Terminalアプリの設定を開き、 "Shell opens with"オプションをデフォルトから/ bin/bashに変更しました。それでおしまい。清潔でシンプル。

0
markgp