私はこのシェルスクリプトTest.sh
を持っています:
#! /bin/bash
FILE_TO_CHECK="/Users/test/start.txt"
EXIT=0
while [ $EXIT -eq 0 ]; do
if [ -f "$FILE_TO_CHECK" ]
then
/usr/bin/Java -jar myapp.jar
EXIT=1
else
sleep 30
fi
done
ログイン後にこのスクリプトを自動的に開始する必要があります。
そのため、/System/Library/StartupItems/
のフォルダTest
に入れました
Macを再起動しても、ログインしても何も起こりません。
私もAutomator
を試しましたが、同じ結果、Javaプログラムが実行されていません。
そのフォルダに単純なスクリプトを配置することはできません。 「専用バンドル」Appleが呼び出す方法、基本的に実行可能ファイルを含むフォルダ、および.plistconfiguration。そして、/ Library/StartupItemsに配置する必要があります/ System/Library/StartupItems /は、オペレーティングシステム用に予約されています。
また、全体がdeprecated technologyとしてマークされていることにも注意してください。そして、Appleはlaunchdの使用を示唆しています。ここに設定する方法の例があります:
https://superuser.com/questions/229773/run-command-on-startup-login-mac-os-x
Ivan Kovacevicのポインタ 、特にsuperuser.comリンクが役立ちます。 OS X 10.9.2以降、run-at-loginスクリプトを作成するためのオプションは次のとおりです。
注:メソッドには、次のいずれであるかに関して注釈が付けられます。
スクリプト自体はinvisiblelyを実行しますが、com.Apple.loginwindow
login-hookメソッドを除いて、スクリプトからアプリケーションを視覚的に開くことができます。注意事項:
そのようなアプリケーションがfrontmostになる保証はありません。そのため、ログイン中に開かれた他のウィンドウによって隠される可能性があります。
別のシェルスクリプトを目に見えて実行したい場合は、open /path/to/your-script
を使用してTerminal.app
で開きます。ただし、スクリプトが終了すると、ターミナルウィンドウは自動的に閉じます。
Automator [user-SPECIFIC]:
File > New
、タイプApplication
bash
スクリプトを追加するRun Shell Script
アクションを追加し、そこにスクリプトコードを貼り付けるか、そこから既存のスクリプトを呼び出すコマンドを追加します。*.app
バンドルを保存して、Login Items
のSystem Preferences > User & Groups > Login Items
リストに追加します。
注意:
"C"
ロケールで実行されます。$PATH
は/usr/bin:/bin:/usr/sbin:/sbin
に固定されており、特に/usr/local/bin
は含まれていませんcom.Apple.loginwindow
loginフック[すべてのユーザー-非推奨、ただし機能します]:
管理者権限を持っている場合、これが最も簡単な方法ですが、さまざまな理由(セキュリティ、単一の共有スクリプト、同期実行に制限されている)のため、非推奨です。 Appleソフトウェア製品の一部としてこのメカニズムを使用することに対する特に注意。
Test.sh
などのスクリプトを共有場所(/Users/Shared
など)に配置し、実行可能であることを確認します(chmod +x /Users/Shared/Test.sh
)。Terminal.app
から、以下を実行します。
Sudo defaults write com.Apple.loginwindow LoginHook /Users/Shared/Test.sh
注意:
スクリプトはrootユーザーとして実行されますなので、注意事項を実行します。
ここにリストされたメソッドの中で、これはrootとしてスクリプトを実行する唯一の方法です。
システム全体のログインフックは1つだけです。
LogoutHook
もあることに注意してください。ログインフックスクリプトは、他のログインアクションの前に同期して実行されるため、は短くする必要があります。
osascript
とAppleScriptスニペット(osascript -e 'display dialog "Proceed?"'
など)を介して簡単な相互作用を作成できます。ただし、すべての対話はログインプロセスをブロックします。スクリプトはrootユーザーのコンテキストで実行され、ログオンしているユーザーのユーザー名が最初の引数としてスクリプトに渡されます。
"C"
ロケールで実行されます。$PATH
は/usr/bin:/bin:/usr/sbin:/sbin
に固定されており、特に/usr/local/bin
は含まれていません/
です。リリースされたエージェント:
launchd
- agentが実行するスクリプトは、特定のユーザー用にインストールできますORすべてのユーザー用-後者には管理者権限が必要です。
launchd
の使用はAppleが推奨する方法ですが、別の*.plist
構成ファイルを作成する必要があるため、これも最も面倒です。
利点として、複数のスクリプトを個別にインストールできます。
launchd
スクリプトの特定のタイミングまたはシーケンスは保証されません。大まかに言えば、「ログインと同時に実行」されます。ユーザー固有のタスクとすべてのユーザーのタスクとの間のタイミングは保証されていません。"C"
ロケールで実行されます。$PATH
は/usr/bin:/bin:/usr/sbin:/sbin
に固定されており、特に/usr/local/bin
は含まれていません/
ですが、.plist
ファイルで設定できます-以下を参照してください。/Users/jdoe/script.sh
;特に~
- prefixedパスはしない仕事。*.plist
構成ファイルで使用できるすべてのキーの説明については、man launchd.plist
を参照してください。launchd [user-SPECIFIC]:
Lingon 3
(2014年の初めに$ 5)は、以下のプロセスを容易にするGUIアプリケーションですが、ユーザー固有のスクリプト専用です。Test.sh
などのスクリプトを、/Users/jdoe
などのホームフォルダに配置します。.plist
で次のコマンドを実行して、~/Library/LaunchAgents
に~/Library/LaunchAgents/LoginScripts.Test.plist
の拡張子を持つファイルを作成します(例:Terminal.app
)。
touch ~/Library/LaunchAgents/LoginScripts.Test.plist
ファイルを開き、次の内容で保存します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<!-- YOUR SELF-CHOSEN *UNIQUE* LABEL (TASK ID) HERE -->
<string>LoginScripts.Test.sh</string>
<key>ProgramArguments</key>
<array>
<!-- YOUR *FULL, LITERAL* SCRIPT PATH HERE -->
<string>/Users/jdoe/Test.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
<!-- ... -->
コメントは、カスタマイズする場所を示します。ラベルは自由に選択できますが、一意である必要があります-.plist
ファイル名の同上。簡単にするために、ラベルとファイル名のルートは同じにしてください。
Terminal.app
から、以下を実行します。
launchctl load ~/Library/LaunchAgents/LoginScripts.Test.plist
副作用として、スクリプトはすぐに実行されることに注意してください。その時点から、現在のユーザーがログオンするたびにスクリプトが実行されます。
launchctl load
を実行する必要はありません。ファイルの場所により、次回のログイン時に自動的に取得されるためですが、ファイルが正しく読み込まれることを確認するのに役立ちます。開始[すべてのユーザー]
Test.sh
などのスクリプトを、/Users/Shared
などの共有場所に配置します。.plist
で次のコマンドを実行して、/Library/LaunchAgents
に/Library/LaunchAgents/LoginScripts.Test.plist
の拡張子を持つファイル(管理者権限が必要)を作成します(例:Terminal.app
)。
Sudo touch /Library/LaunchAgents/LoginScripts.Test.plist
ファイルを開き、次の内容で保存します(テキストエディターがオンデマンドで管理者権限を要求することを確認してください。または、Sudo nano /Library/LaunchAgents/LoginScripts.Test.plist
を使用してください)。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<!-- YOUR SELF-CHOSEN *UNIQUE* LABEL (TASK ID) HERE -->
<string>LoginScripts.Test.sh</string>
<key>ProgramArguments</key>
<array>
<!-- YOUR *FULL, LITERAL* SCRIPT PATH HERE -->
<string>/Users/Shared/Test.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
<!-- ... -->
コメントは、カスタマイズする場所を示します。ラベルは自由に選択できますが、一意である必要があります-.plist
ファイル名の同上。簡単にするために、ラベルとファイル名のルートは同じにしてください。
Terminal.app
から、以下を実行します。
Sudo chown root /Library/LaunchAgents/LoginScripts.Test.plist
Sudo launchctl load /Library/LaunchAgents/LoginScripts.Test.plist
副作用として、スクリプトはすぐに実行されることに注意してください。その時点から、ユーザーがログオンするたびにスクリプトが実行されます。
launchctl load
を実行する必要はありません。ファイルの場所により、次回のログイン時に自動的に取得されるためですが、ファイルが正しく読み込まれることを確認するのに役立ちます。launchd-oneshot は、ログイン時に実行するlaunchdジョブとしてスクリプトをインストールするために使用されます。
brew install cybertk/formulae/launchd-oneshot
Sudo launchd-oneshot Test.sh --on-login