質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

1回答

4929閲覧

launchdの実行エラーについて

a-student

総合スコア14

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

1クリップ

投稿2017/08/11 00:49

初学者です。
python3.6で書いたプログラムを毎朝9時に自動実行させるためにlaunchdを使ってみました。

xmlでplistのファイルを書いてloadしたのですが、
9時になっても開かないのでsystem.logを見てみたとろ

Aug 11 09:00:06 user-no-MacBook com.apple.xpc.launchd[1] (コート予約(s.v ver)[613]): Service exited with abnormal code: 2

とエラー表示されていました。

$ plutil -lint

で確かめたところ
ok
とでたので形式上はちゃんと書けていると思うのですが、、、

plistのスクリプトを乗せます。

xml

1 2<?xml version="1.0" encoding="UTF-8"?> 3<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 4<plist version="1.0"> 5<dict> 6 <key>Label</key> 7 <string>コート予約(s.v ver)</string> 8 <key>ProgramArguments</key> 9 <array> 10 <string>/usr/local/bin/python3.6</string> 11 <string>/Users/user/Library/Mobile\ Documents/com\~apple\~CloudDocs/python/コート予約\(s.v\ ver\).py</string> 12 </array> 13 <key>StartCalendarInterval</key> 14 <array> 15 <dict> 16 <key>Weekday</key> 17 <integer>1</integer> 18 <key>Hour</key> 19 <integer>9</integer> 20 <key>Minute</key> 21 <integer>0</integer> 22 </dict> 23 <dict> 24 <key>Weekday</key> 25 <integer>2</integer> 26 <key>Hour</key> 27 <integer>9</integer> 28 <key>Minute</key> 29 <integer>0</integer> 30 </dict> 31 <dict> 32 <key>Weekday</key> 33 <integer>3</integer> 34 <key>Hour</key> 35 <integer>9</integer> 36 <key>Minute</key> 37 <integer>0</integer> 38 </dict> 39 <dict> 40 <key>Weekday</key> 41 <integer>4</integer> 42 <key>Hour</key> 43 <integer>9</integer> 44 <key>Minute</key> 45 <integer>0</integer> 46 </dict> 47 <dict> 48 <key>Weekday</key> 49 <integer>5</integer> 50 <key>Hour</key> 51 <integer>9</integer> 52 <key>Minute</key> 53 <integer>0</integer> 54 </dict> 55 </array> 56</dict> 57</plist> 58

エラーの心当たりといえば、

①macの標準装備のpython2.7からpython3.6に変えていないこと。

コート予約(s.v ver)はatomでpython3.6で書いています。
plistではpython3.6を使うようにかいているはずですが、、、

②最初はこのplistファイルは
bad ownership permissionsのエラーでloadできなかったので

$ chmod 600 コート予約(s.v ver).plist

で権限もたせたこと。
くらいです。

なんでもいいので、原因わかりそうな方はお答えいただけると嬉しいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ターミナルでlauchctlから目的の.plistをロードする前に、launchctl setenv LANG ja_JP.UTF-8と打ってみて下さい。以下のような簡単な.plistでテストしたら私のところではそれで動いているようですが...

plist

1<?xml version="1.0" encoding="UTF-8"?> 2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3<plist version="1.0"> 4<dict> 5 <key>Label</key> 6 <string>test.teratail.com</string> 7 <key>ProgramArguments</key> 8 <array> 9 <string>/usr/local/bin/python3.6</string> 10 <string>/Users/fiwa/Desktop/test.py</string> 11 </array> 12 <key>StandardErrorPath</key> 13 <string>/Users/fiwa/Desktop/error.log</string> 14 <key>StandardOutPath</key> 15 <string>/Users/fiwa/Desktop/out.log</string> 16 <key>StartInterval</key> 17 <integer>30</integer> 18</dict> 19</plist> 20

あと、上の例のようにStandardErrorPathとかStandardOutPathを指定しておくと、運が良ければもう少し詳しいことが判るかも知れません。


少し追加情報:
私の環境の場合、指定したパスにスクリプトが見つからないと"Service exited with abnormal code: 2"、環境変数でLANGを指定していない場合は "Service exited with abnormal code: 1" とコンソールのsystem.logには出るようです。いずれの場合もStandardErrorPathで指定したエラーログにはもう少し詳しい情報が出てきます。(前者の場合が "Errno 2] No such file or directory"、後者では "UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)" となっています。)ターミナルからlaunchctl setenv LANG ja_JP.UTF-8と打って目的のスクリプトが実行されるなら、plistに"EnvironmentVariables"キーを書いておけばよいようです。

plist

1<?xml version="1.0" encoding="UTF-8"?> 2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3<plist version="1.0"> 4<dict> 5 <key>EnvironmentVariables</key> 6 <dict> 7 <key>LANG</key> 8 <string>ja_JP.UTF-8</string> 9 </dict> 10 <key>Label</key> 11 <string>test.teratail.com</string> 12 <key>ProgramArguments</key> 13 <array> 14 <string>/usr/local/bin/python3.6</string> 15 <string>/Users/fiwa/Desktop/test.py</string> 16 </array> 17 <key>StandardErrorPath</key> 18 <string>/Users/fiwa/Desktop/error.log</string> 19 <key>StandardOutPath</key> 20 <string>/Users/fiwa/Desktop/out.log</string> 21 <key>StartInterval</key> 22 <integer>30</integer> 23</dict> 24</plist>

投稿2017/08/11 13:57

編集2017/08/12 04:59
fiwa

総合スコア1192

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

a-student

2017/08/12 10:00

"Service exited with abnormal code: 2" のエラーだったのですが、 launchctl setenv LANG ja_JP.UTF-8 で一発で解決しました。ありがとうございます。 もしよければ、これにはどういう意味があるのか教えていただけないでしょうか。
fiwa

2017/08/12 12:20

Macのターミナルではデフォルトの状態では起動時に使用言語についての情報(環境変数$LANG)をシステムの言語環境やユーザーが書いたシェルの設定から引き継ぐようになっているのですが、launchdからpythonを使うときなどはこの設定は引き継がれないようです。なのでスクリプトを正しく扱うには言語やエンコーディングを教えてやらなくてはならないことになります。`launchctl setenv LANG ja_JP.UTF-8`とターミナルから入力するととりあえず教えてやることはできるのですが、これだとシステムからログアウトすると設定が消えてしまうので、回答の最後に書いたようにplistにEnvironmetVariablesキーとして直接書いてやるか、あるいは環境変数の設定を別に独立したplistとして書いてまとめて有効にする、という方法が使われるようです。 http://qiita.com/toshihikoyanase/items/47407551d8f3d4e8c39a http://satokaz.github.io/2016-07-11-vscode-env/ この辺の設定方法もMacのOSバージョンによって仕様が違っているようなので注意する必要がありそうです。いろいろ難しいですね。
a-student

2017/08/13 04:29

なるほど、、、 ネットで調べてもなかなか原因がわからなかったのでありがたいです。 詳しく教えていただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問