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


53

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

回答:


33

公式にはこれらのどれも。Appleは、launchdを使用する方法を提案しました。このセットアップを設定するためのGUIが含まlingon起動制御を

ホームディレクトリ〜/ .bashrc、〜/ profile、〜/ .bash_profileにあるファイルについて言及するファイルについては、ターミナル経由でログインしたときにのみ開始されます。/ etcにあるものは、ホームディレクトリにあるものだけでユーザーのログインが行われます。..前に、すべてのユーザーに対して起動シェルによって実行され、bashのマニュアル

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


1
だから私のコマンドがそのファイルのいずれかに挿入された場合、/etc起動時に実行する必要がありますか?それが何であるかは重要ですか?
Wolfy87

1
/etc/bashrcといったように、シェルの起動時に実行されます。ユーザーだけでなく、ユーザーがシェルを起動~/.bashrcするたびに前者が実行されるようになります。
スコット

@スコットは正しいです私は私の答えを修正しました
-user151019

4
わかりましたが、launchdの使用方法がわからないだけです。プログラム用のplistファイルを作成しようとしましたが、実行方法や起動時に実行する方法がわかりません。
Wolfy87

1
「launchd」への@Markリンクが壊れています:(
Artem

58

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をunloadに置き換えます。


1
このページ(developer.apple.com/library/mac/documentation/Darwin/Reference/…)には、launchdによって起動されるべきではない多くのことがリストされています。起動時に任意のコマンドを実行したい場合は、制御できない場合があり、コマンドがそれらの処理を実行する可能性があります。また、launchdが再起動したり、アイテムが停止したりするのは、1回限りであるか、単独で再起動するためです。このような場合はどうすればよいですか?
マイケル

@スコット、ありがとう。これは、私がインターネットで見つけた最も役立つ答えです。
ドミトリー14

5
これは、アプリケーションを10秒ごとに実行しようとします。これは、死なないサービスに適しています。これが時間どおりに1回実行されるスクリプトの場合(私の場合、再起動時にSlackにメッセージを1回送信する)<key>LaunchOnlyOnce</key><true/>、dictに追加します。
msanford

素晴らしい点、サンフォードさん。dめないlaunchdは、巨大なログファイルを作成し、Macの速度を低下させます(このような大きなログファイルの読み取りと書き込みを継続的に行うため)。現在、私のコンピューターで実行されているいくつかのひどく書かれた商用ソフトウェアでその修正を使用するかもしれません。
Foliovision

1
自己への注意:環境変数が必要な場合:serverfault.com/questions/111391/…–
Quandary

48

Stack Overflowの別の簡単なソリューション:次のことができます。

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

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


2
テスト済みで動作し、面倒なplistの編集や有料のLingonアプリは必要ありません。
ルカシュ

4
ただし、3行のシェルスクリプトに約1804kのボイラープレートが追加されます。
android.weasel

1
Automatorで有用なものを作成するための詳細な指示をありがとう。これは、1つのタスクだけでなく私にも役立ちます。ジェイミーありがとうございます。Turbo Boost Switcherを使用してTurbo Boostをオフにするために使用しています。私は有料版を所有していますが、ライセンスの仕組みはひどいので、無料版を使用することをお勧めします。
Foliovision

1
android.weasel参照Geekaristの回答@ superuser.com/a/995564/255375
JD

Superuse-ful
-D

28

ログイン時にコマンドを起動するには、次を実行できます。

  • コマンド(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
  • [システム環境設定]> [アカウント]> [ログイン項目]でこのファイルを追加します

3
最良かつ最も簡単な答えです。受け入れられているソリューションよりもはるかに簡単です。[システム環境設定]> [ユーザーとグループ]> [ログイン項目...](アカウントではない)にあることに注意してください。また、ファイルは.cmdで終わる必要はなく、どこにでも置くことができます。それをchmod + xするだけです。
foreyez 16

5
ただし、ログイン項目はシステムの起動時ではなくログイン時に実行されます。サーバーを実行する場合、それは大きな違いです。
-not2savvy

あなたは正しい@ not2savvyです。サーバーについては、@ Sridhar-Sarnobatの回答をお勧めし@rebootます。しかし、私の答えはグラフィカルなプログラムを起動することを可能にします。だから私はそれが便利だと思います。
ギーカリスト

なぜで終わるcmdの代わりにsh
シミンジー

3

MacOS での方法launchdlaunchctl動作を確認する必要があります。両方のコマンドのマニュアルページを読むことから始めることができます。次に、内部/Library/LaunchAgents/を見/Library/LaunchDaemons/て、launchctlインターフェイスを介して異なる時間にロードするようにアプリケーションをセットアップする方法の例を見てみましょう。

スタックオーバーフローで私が見つけた例次に示します。



0

私はこの問題に対する非常に簡単なUnixの答えに興味を持ち、別のサイトでそれを見つけました。ソリューションの概要は次のとおりです。

ログインシェルの標準は、名前に「profile」が含まれるbash構成ファイルを常に/etc/profile、~/.bash_profile、次に〜/ .bash_login、最後に〜/ .profileの順に探すことです。ログインシェルが終了すると、〜/ .bash_logoutを読み取ります。

私の場合、〜/ .bash_profileを作成してから、Macターミナルアプリの設定を開き、[シェルで開く]オプションをデフォルトから/ bin / bashに変更しました。それでおしまい。クリーンでシンプル。


-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.