ইয়োসেমাইটে লঞ্চক্টল দিয়ে ডিমন চালু করতে পারে না


27

আমার একটি লঞ্চড ডিমন স্থাপন করা আছে ~/Library/LaunchAgentsযা ম্যাভেরিক্সে ভাল কাজ করেছে। তবে এটি ইয়াসেমাইট পাবলিক বিটাতে শুরু হবে না। ডেমন প্লিস্টটি এটির মতো (আমার ব্যবহারকারী নাম darksairইউআইডি 501 সহ)

<?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>org.darksair.retrmail</string>
    <key>ProgramArguments</key>
    <array>
      <string>/Users/darksair/bin/retrmail.py</string>
    </array>
    <key>KeepAlive</key>
    <false/>
    <key>StartInterval</key>
    <integer>300</integer>
    <key>LaunchOnlyOnce</key>
    <false/>
    <key>UserName</key>
    <string>darksair</string>
    <key>ProcessType</key>
    <string>Standard</string>
    <key>EnvironmentVariables</key>
    <dict>
      <key>PATH</key>
      <string>/Users/darksair/Python/bin:/Users/darksair/Python3/bin:/Users/darksair/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
    </dict>
    <key>StandardOutPath</key>
    <string>/Users/darksair/logs/retrmail.log</string>
    <key>StandardErrorPath</key>
    <string>/Users/darksair/logs/retrmail.log</string>
  </dict>
</plist>

মূলত এটি ~/bin/retrmail.pyপ্রতি 5 মিনিটে চালানোর কথা ।

আমি লক্ষ্য করেছি যে ইয়োসেমাইটে লঞ্চ হয়েছে ২.০ এ উন্নীত হয়েছে, এবং লঞ্চক্টেলটিতে নতুন কমান্ড রয়েছে। আমি চেষ্টা করেছিলাম

sudo launchctl kickstart user/501/org.darksair.retrmail

এবং এটা বলেছে

Could not find service "org.darksair.retrmail" in domain for uid: 501

আমি পুরানো স্কুল চেষ্টা করেছিলাম

sudo launchctl load ~/Library/LaunchAgents/retrmail.plist

এবং এটা বলেছে

/Users/darksair/Library/LaunchAgents/retrmail.plist: Path had bad ownership/permissions

ফাইলটি আমার এবং স্টাফ গ্রুপের মালিকানাধীন। আমি একই ত্রুটির সাথে 644 এবং 600 উভয়ের অনুমতি চেষ্টা করেছি।

সুতরাং কেউ কীভাবে জোসাইমেটে একটি লঞ্চড ডেমোনকে সঠিকভাবে আগুনে ফেলা যায় জানেন?


আপডেট: দেখে মনে হচ্ছে আমার লঞ্চ এজেন্ট ফাইলটির মালিকানা থাকতে হবে root:wheel। আমি ছিঁড়ে যাওয়ার পরে, চেষ্টা করেছি

sudo launchctl load ~/Library/LaunchAgents/retrmail.plist

এবং এটি কোনও ত্রুটি জারি করেনি। এবং আমি মনে করি আমার ডিমন ঠিকমতো চলছে। আমি এই প্রশ্নটি উন্মুক্ত রেখে দেব কারণ আমি মনে করি লঞ্চ হওয়া নথিতে স্পষ্টভাবে বলা আছে যে লঞ্চ এজেন্ট ফাইলটি ডিমনটি চালানো ব্যবহারকারীর দ্বারা মালিকানাধীন হতে পারে।


আপডেট 2: না এটি সঠিকভাবে চলছিল না। এটি কেবল একবার চালানো হয়েছিল, তবে তা আবার নয়, যেন এটি লোড হয়েছে।


আপডেট 3: আমি ইয়োসেমাইট পাবলিক বিটা 3 এ আপগ্রেড করেছি এবং আমার এজেন্টকে এটিতে পরিবর্তন করেছি

<?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>org.darksair.retrmail</string>
    <key>ProgramArguments</key>
    <array>
      <string>/Users/darksair/bin/retrmail.py</string>
    </array>
    <key>StartInterval</key>
    <integer>300</integer>
    <key>UserName</key>
    <string>darksair</string>
    <key>EnvironmentVariables</key>
    <dict>
      <key>PATH</key>
      <string>/Users/darksair/Python/bin:/Users/darksair/Python3/bin:/Users/darksair/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
    </dict>
    <key>StandardOutPath</key>
    <string>/Users/darksair/logs/retrmail.log</string>
    <key>StandardErrorPath</key>
    <string>/Users/darksair/logs/retrmail.log</string>
  </dict>
</plist>

আমি এই এজেন্টটি পুনরায় লোড করেছি এবং আমার মনে হয় এখন এটি সঠিকভাবে কাজ করছে। আমি এখনও এই প্রশ্নটি খোলা রেখে চলেছি কারণ আমার আগের প্লিস্টটিতে কী সমস্যা তা আমি জানি না।


উপসংহারে, যা আমি পেয়েছি তা হল root:wheelলোড করার জন্য আমাকে প্লাস্টের মালিককে পরিবর্তন করতে হবে।


এই কাজ কি Yosemite ফাইনালে?
টিজে লুওমা

@ টিজে লুওমা: হ্যাঁ যতক্ষণ না প্লিস্টের মালিক হ'ল মূল: চাকা।
মেট্রোওয়াইন্ড

উত্তর:


21

থেকে man launchctl

নোট করুন যে প্রতি ব্যবহারকারীর কনফিগারেশন ফাইলগুলি (লঞ্চআজেন্টস) অবশ্যই মূলের (যদি সেগুলি / লাইব্রেরি / লঞ্চআজেন্টগুলিতে থাকে) বা ব্যবহারকারী তাদের লোড করে (যদি তারা OME হোম / লাইব্রেরি / লঞ্চ এজেন্টে অবস্থিত) থাকে তবে তার মালিকানাধীন থাকতে হবে। সমস্ত সিস্টেম-ব্যাপী ডেমনগুলি (লঞ্চডেমোনস) অবশ্যই মূলের মালিকানাধীন। কনফিগারেশন ফাইলগুলিকে অবশ্যই গ্রুপ এবং বিশ্ব লেখার অনুমতি দেওয়া উচিত। সুরক্ষার কারণে এই বিধিনিষেধগুলি স্থানে রয়েছে, কারণ একটি প্রবর্তিত কনফিগারেশন ফাইলটিতে লিখনযোগ্যতা মঞ্জুরি দেয় যা নির্বাহযোগ্য কোনটি চালু করা হবে তা নির্দিষ্ট করতে দেয়।

ফিক্স হয়

sudo chmod 600 /Library/LaunchDaemons/x.plist
sudo chown root /Library/LaunchDaemons/x.plist

2
"বা ব্যবহারকারী তাদের লোড করছে" <- আমার এই সমস্যাটিই এই সমস্যা।
মেট্রোওয়াইন্ড

2
আমি কোনও ইউনিক্স ছেলে নই, তবে এটি "গ্রুপ এবং বিশ্ব লিখতে অস্বীকার করুন" বলেছে। যেহেতু এটি এখনও পড়ার প্রয়োজন হতে পারে তাই এটি হওয়া উচিত নয় chmod 644?
জেসন

5

আশ্চর্যজনকভাবে যথেষ্ট, ব্যবহার sudoকরা আপনার সমস্যা ছিল। ব্যবহার করে sudo, আপনি আর নিজেরাই ছিলেন না, তাই আপনি নিজের ফাইলের মালিক ছিলেন না। সরান sudo, আদেশটি পুনরাবৃত্তি করুন এবং এটি ঠিক জরিমানা করা উচিত। এটির সকলের দার্শনিক পদ্ধতির জন্য দুঃখিত।


4

সমাধান খুঁজে পেয়েছি।

এই ক্ষেত্রে সঠিক কমান্ডটি হ'ল

launchctl bootstrap gui/501 ~/Library/LaunchAgents/retrmail.plist

এবং আনলোড করতে,

launchctl bootout gui/501 ~/Library/LaunchAgents/retrmail.plist

launchctl loadতবে কেন রুট প্রয়োজন তা জানেন না , তবে লোড / আনলোড যেভাবেই হ্রাস করা হয়।


ম্যান পৃষ্ঠা বুটআউট বুটকাট নয় তালিকাভুক্ত করে। আমার মতে স্বয়ংক্রিয়রোধটি আপনাকে পেয়েছে যেহেতু আমার মেশিনে এটি বুটআউটকে বুটকটে পরিবর্তন করে।
স্টিভ মোসার

@ মেট্রোওয়াইন্ড আমি পাচ্ছি উপরের কমান্ডের সাহায্যে কোড = 112 ত্রুটির জন্য ডোমেন খুঁজে পাওয়া যায়নি। এটি সামঞ্জস্যপূর্ণ নয়। কোন সুত্র ?
পরগ বাফনা

আপনি যদি এখনও প্রয়োজন ছিল chmod& chown?
Itachi

@ ইটাচি, না ডিফল্ট মালিক এবং অনুমতি ঠিক রাখা উচিত।
মেট্রোওয়াইন্ড

@ পরগবাফনা, আমি নিশ্চিত নই। হতে পারে আপনার ইউআইডি 501 নয়?
মেট্রোওয়াইন্ড

3

এটিতেও ছুটে এসেছেন, ব্যবহারকারীর ব্যবহারের চেষ্টা করছেন, রুটের মালিকানাধীন .plist নয় (যেমনটি একজনকে করতে সক্ষম হওয়া উচিত)

$ load ~/Library/LaunchAgents/com.blash.blah.plist
Could not find domain for 

আমি কনসোলে লগইন করা হয়নি এমন সময়ে আমি দূরবর্তী অবস্থান থেকে এই মেশিনে এসএস-এড হয়েছি (হেডলেস) যা আমার সমস্যা বলে মনে হয়েছিল - কমপক্ষে ব্যবহারকারী-পরিচালিত পরিষেবাদিগুলির প্রধান পর্দায় ব্যবহারকারী লগইন হওয়া প্রয়োজন (আমি শেষ করে শেষ করেছি) রিমোট-ম্যানেজমেন্টের মাধ্যমে লগইন-ইন করুন কারণ এটি একটি মাথাবিহীন মেশিন)

আইএমও, আপনি নিজের বিকল্পগুলি লগ ইন করার জন্য ব্যক্তিগতভাবে না থাকলেও আপনি এটি চালনা করতে চান:

  • আপনার অ্যাকাউন্টটি স্বয়ংক্রিয়ভাবে লগইন করুন (সুরক্ষার অন্তর্ভুক্ত নোটটিও, উত্তরের একটিতে উল্লিখিত ইউজারনেম ট্যাগ ছাড়াই)

  • বিভিন্ন পরামর্শ হিসাবে উল্লিখিত ফাইলগুলি মূলের মালিকানাধীন করুন (আপনার ইতিমধ্যে যেমন ব্যবহারকারীর নাম দিয়ে ব্যবহারকারীকে কার্যকর করতে পারেন)


2
তোমাকে অনেক ধন্যবাদ. আমি আপনার উত্তরে সমাধান পেয়েছি।
14

2

এখানে একটি নির্বোধ ধারণা।

ইয়োসেমাইটে আপগ্রেড করার পরেও আমার ঠিক একই ত্রুটি হয়েছিল। আমি ভুল করে ধরে নিয়েছিলাম এর অর্থ .plist ফাইলের খারাপ মালিকানা / অনুমতিগুলির অর্থ, যখন আসলে কোনও কারণে বাইনারিটি যে আমি প্লিস্টে (আমার ক্ষেত্রে ক্যাসান্দ্রায়) উল্লেখ করছিলাম, তার নির্বাহযোগ্য বিটটি হারিয়েছিল।

chmod + x'ing এটি ঠিক করেছে।

সম্ভবত আপনার সমস্যা নয়, তবে এটি একটি শটের জন্য মূল্যবান হতে পারে :)


যদিও এটি আমার ক্ষেত্রে প্রযোজ্য নয়। আমার এক্সিকিউটেবল এক্স এক্স বিট আছে। তবে যাইহোক উত্তর দেওয়ার জন্য আপনাকে ধন্যবাদ। আশা করি এটি আরও কিছু লোককে সহায়তা করতে পারে।
মেট্রোওয়াইন্ড

2

UserNameকী এবং স্ট্রিংটি সরান ।

সমস্যাটি হ'ল UserNameপ্রক্রিয়াটি রুট দ্বারা শুরু করা হলেই কীটি ব্যবহার করা যেতে পারে। এটি কেবল রুট হিসাবে শুরু করা যেতে পারে যদি প্লাস্টটি মূলের মালিকানাধীন থাকে। মূলত, প্রক্রিয়াটি রুট দ্বারা শুরু হয় এবং তারপরে নির্দিষ্ট ব্যবহারকারীর কাছে মামলা করা হয়। আপনি যদি এই প্রক্রিয়াটি নিজের মতো চলতে চান তবে আপনার ~ / লাইব্রেরি / লঞ্চ এজেন্টস ফোল্ডারে প্লিস্টটি রাখুন এবং ব্যবহারকারীর নাম কী সরিয়ে দিন।


আমি zabbix_agend এর জন্য 'ব্যবহারকারীর নাম' বিকল্পটি সরিয়ে দেওয়ার পরে এটি কাজ করছে। ধন্যবাদ! - gist.github.com/chusiang/04db38f5173784e33b68
চু-সাইং লাই


1

আপনি কি কোনও অনুমতিপ্রাপ্ত এজেন্টকে ম্যানুয়ালি পুনরায় লোড করার চেষ্টা করছেন? এর যে কোনওটির প্রয়োজন কেন আমি সম্পূর্ণরূপে বুঝতে পারি না তবে আমি বিশ্বাস করি যে আপনাকে আপনার ব্যবহারকারীদের ডোমেনের সাথে সংযুক্ত করা দরকার (যা মনে হয় যে আপনি যখন রুট হিসাবে চালাবেন তখন আপনি সংযুক্ত ছিলেন না)। এই ফাংশনগুলি পুনরায় সংযুক্তি ব্যবহার করে আমার পক্ষে কাজ করেছিল।

function as_user {
    local user="$1"
    local user_pid=$(ps -axj | awk "/^$user / {print \$2;exit}")
    local command="sudo launchctl bsexec $user_pid sudo -u '$user' $2"
    echo "Running:"
    echo "$command"
    eval $command
}

function as_current_user {
    as_user "$(whoami)" "$*"
}

function reload_agent {
    as_current_user launchctl unload "$1"
    as_current_user launchctl load "$1"
}

আপনি নিম্নলিখিত হিসাবে এটি ব্যবহার করবে:

reload_agent ~/Library/LaunchAgents/com.hw.helloworld.plist

বিসেক্সেক আপনাকে আপনার ডোমেনে ফিরিয়ে রাখে এবং আপনাকে ব্যবহারকারী লঞ্চজেন্ট হিসাবে কাজটি যুক্ত করতে দেয়।


এটিতে বলা হয়েছে: / ব্যবহারকারীর / سردارকসায়ার / লাইব্রেরি / লঞ্চআজেন্টস / রিটারেল.প্লিট: ইতিমধ্যে কার্যক্রম চলছে progress এই মুহুর্তে আমার প্রশ্নগুলি মূলত: কিকস্টার্ট কমান্ডটি কেন কাজ করে নি? এবং কেন আমাকে প্লাস্টের মালিকানা রুট করতে হবে…?
মেট্রোওয়াইন্ড

1
আপনার প্লাস্ট ফাইলের মালিককে রুট হিসাবে সেট করা উচিত নয়; directory / লাইব্রেরি / লঞ্চএজেন্টস-এর সমস্ত কিছুর ব্যবহারকারীর মালিকানা উচিত যাঁর সেই ডিরেক্টরিটি অন্তর্ভুক্ত। কমান্ডটি লোড করার আগে যখন আমি কমান্ডটি আনলোড না করেছিলাম তখনই আমি অপারেশনটি ইতিমধ্যে চলছে progress আমার দেওয়া ফাংশনটি কি আপনি ব্যবহার করছেন?
আইমলিসন

হ্যাঁ। আমি আপনার ফাংশন ব্যবহার করছিলাম। এবং আমি প্রথমে
প্লিস্টটি

আপনার সরবরাহ করা প্রথম প্লাস্টটি কেবল লোড করার চেষ্টা করেছি এবং এটি আমার পক্ষে কাজ করেছে। ফাইলের জন্য কী অনুমতি সেট করা আছে?
আইমলিসন

এটি অনেক কিছুর জন্য অবিশ্বাস্য কোডের টুকরো। আমি বিভিন্ন ম্যাকোস ডিভাইসগুলি পরিচালনা করতে পুতুল এবং কাস্টম বাশ স্ক্রিপ্টগুলির মিশ্রণটি ব্যবহার করছি এবং এলোমেলো সমস্যা কারণ সুরক্ষা নিরীক্ষণ অধিবেশন বা ব্যবহারকারীর ডোমেনটি সঠিক নয় তাই সাধারণ। মহান কাজ!
অ্যান্ড্রু হোয়াইট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.