2014-01-28 2 views
0

나는 launchD를 사용하여 매 24 시간마다 스크립트를 실행하려고했지만 이상한 이유로 오류가 계속 발생합니다 : 2; 파일을 찾을 수 없다는 것을 의미하지만 프로그램 인수의 파일 경로가 올바른지 확인하고 두 번 확인했습니다. 터미널에서 스크립트를 실행하면 스크립트가 제대로 실행됩니다. 이것이 작동하지 않는 이유에 대한 아이디어가 있습니까?LaunchD 작업 실패 이상한 이유 : 2

스크립트는 AngelList에서 새로 추가 된 시작 정보를 단순히 긁어내어 전자 메일로 보냅니다. 나는 모든 경로가 절대 수 있도록 한 내 bash는 스크립트에서

Python: 

#!/opt/local/bin/python2.6 
import urllib 
import json 
import datetime 
import ast 
import time 
import smtplib 
from pymongo import MongoClient 
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 

... #code omitted 

def find_data(): 
    client = MongoClient() 
    client = MongoClient('localhost', 27017) 
    db = client.tiger_labs 
    collection = db.new_startups 
    existing_names = [] 
    for startup in collection.find(): 
     existing_names.append(startup.get('name')) # inserts all "already-found" startups to the database 

    market_tags = ["mobile health", "health care", "health care information technology", "health and wellness", "personal health"] # lists out all tags 

    ... # code omitted 

    text += "</html>" 
    if text != "<html></html>": # sends e-mail if not empty 
     nathan = "[email protected]" 
     tigerlabs = "****@tigerlabs.co, *****@tigerlabs.co" 
     msg = MIMEMultipart('alternative') 
     msg['Subject'] = "New Startups" 
     msg['From'] = nathan 
     msg['To'] = tigerlabs 
     part1 = MIMEText(text, 'html') 
     msg.attach(part1) 
     server = smtplib.SMTP('smtp.gmail.com:587') 
     server.starttls() 
     server.login("[email protected]", "******") 
     server.sendmail(nathan, tigerlabs, msg.as_string()) 
     server.quit() 
     print "sent" 
    else: # purely for testing reasons; wanted to see if launchD was executing 
     server = smtplib.SMTP('smtp.gmail.com:587') 
     server.starttls() 
     server.login("[email protected]", "*********") 
     server.sendmail("[email protected]", "*****@princeton.edu", "Hi it worked.") 
     server.quit() 
     print "not_sent" 

find_data() 

LaunchD: 

<?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> 
    <string>com.tigerlabs.TigerLabs</string> 
    <key>ProgramArguments</key> 
    <array> 
     <string>/Users/nathanlam/Desktop/Programming_Labs/Coding/TigerLabs.py</string> 
    </array> 
    <key>StartInterval</key> 
    <integer>86400</integer> 
    <key>KeepAlive</key> 
    <dict> 
      <key>NetworkState</key> 
      <true /> 
    </dict> 
    <key>StandardErrorPath</key> 
    <string>/tmp/test.stderr</string> 
</dict> 
</plist> 
+1

'/ usr/include/sys/errno.h '에있는 2는'ENOENT', 즉'no such file or directory'입니다. –

답변

0

:

다음은 내 launchd에 파이썬 스크립트입니다. LaunchAgent에서 나는 똑같이했습니다! LaunchAgent에서/Users/xyz 대신 ~을 사용했습니다. 마지막 조정은 트릭을 했어!