কিভাবে চালু করা একটি এজেন্ট নিবন্ধন করতে


14

আমি সঙ্গে একটি পর্যাবৃত্ত লঞ্চ নির্দিষ্ট সময় নির্ধারণের জন্য অক্ষম নই launchctl/ launchdOS X এর (চিতা) উপর। মূলত, আমি ওয়েবে নির্দেশিকাদের একটি ধাপে ধাপে তালিকাটি খুঁজে পেতে অক্ষম এবং স্বজ্ঞাত পদ্ধতির কাজ হয় না।

sync.plistফাইল:

<?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>net.madrat.utils.sync</string>
        <key>Program</key>
        <string>rsync</string>
        <key>ProgramArguments</key>
        <array>
            <string>-ar</string>
            <string>/path/to/folder/</string>
            <string>/path/to/backup/</string>
        </array>
        <key>StartInterval</key>
        <integer>7200</integer>
    </dict>
</plist>

আমি এই স্ক্রিপ্টটি পথের ভিতরে রেখেছি ~/Library/LaunchAgents

এরপরে, আমি স্ক্রিপ্টটি ব্যবহার করে নিবন্ধভুক্ত করেছি

launchctl load ~/Library/LaunchAgents/sync.plist

অবশেষে, এটি কাজ করে তা পরীক্ষা করার জন্য, আমি কাজটি শুরু করেছি :

 launchctl start net.madrat.utils.sync

- কিছুই ঘটেনি. rsyncটার্মিনালে ম্যানুয়ালি কমান্ডটি কার্যকর করা প্রত্যাশিত ফলাফল দেয়।

আমি মোটামুটি নিশ্চিত যে এই চাকরিটি সঠিকভাবে নিবন্ধিত হয়েছে কারণ যদি আমি একটি অ-বিদ্যমান কাজ শুরু করার চেষ্টা করি তবে আমি একটি ত্রুটি বার্তা পাই (যা আমি উপরের আদেশে পাইনি )।

আমি কি ভুল করছি?

উত্তর:


5

লিংগন লঞ্চ করা পরিচালনা করার জন্য একটি ভাল জিইউআই সরঞ্জাম। প্রকল্পটি এখন অসমর্থিত বলে মনে হচ্ছে ... তবে এটি এখনও 10.5.x এ কাজ করে definitely

তবে আপনার নির্দিষ্ট সমস্যা ... আপনি চেষ্টা করেছেন?

sudo launchctl list 

.Plist সঠিকভাবে ফায়ার করছে কিনা এটি আপনাকে বলবে। ডেমনটি লাচিং না করলে এটি 1 এবং সাফল্য পেলে '0' ফিরে আসবে। সম্ভবত এটি দেখুন।

আমি যখনই '1' দেখি এটি সাধারণত কারণ আমি স্ক্রিপ্টটি ভুল জায়গায় রেখেছি, টাইপ করেছি বা ভুলভাবে অনুমতি সেট করেছি।

এছাড়াও .... প্রায়শই রিবুট করুন .. আমি দেখেছি

launchctl start

রিবুট যেখানে কার্যকর ছিল না ..

এছাড়াও, আপনার প্রশ্নটি আরও কাছাকাছি দেখার জন্য .... কেন কেবল সেই আরএসসিএন কোডটি বাশ স্ক্রিপ্টের মধ্যে রাখবেন না ... এবং এটি আটকে রাখুন /usr/bin/..... তাহলে আপনি কেবল chmod+xসেই ফাইলটি .... এবং আপনার তালিকাটি সরল করতে পারবেন could যখনই আপনি চান সেই স্ক্রিপ্টটি ফায়ার করুন ....


ধন্যবাদ, একটি অতিরিক্ত শেল ফাইলে কমান্ড নির্বাণ এবং চালু করে কৌতুক করেনি। যদিও এটি খুব অসন্তুষ্টির সমাধান ... কেন আদেশটি সরাসরি কাজ করে না? উপায় দ্বারা, launchctl list করেনি প্রদর্শন 1, কিন্তু পরে শুধুমাত্র আমি ব্যবহার এজেন্ট ম্যানুয়ালি শুরু launchctl start
কনরাড রুডল্ফ

আমি ইতিবাচক নই, তবে আমি মনে করি লঞ্চ করা .লিস্ট ফাইলগুলি সত্যই ডেমনের 'লঞ্চ-অন-ডিমান্ড' মানদণ্ড সংজ্ঞায়িত করার উদ্দেশ্যে করা হয়েছে ... সম্ভবত আপনি <key> এ যে আর্গুমেন্টগুলি দিয়েছিলেন সেগুলি নিয়ে কী করবেন তা নিশ্চিত নয় Perhaps ProgramArguments </ কী>।
কেসআইআইটি

11

দীর্ঘ উত্তর:

কিছু প্রাথমিক নীতি না বুঝে লঞ্চের সাথে কাজ করা শক্ত। সুতরাং এটি সম্ভবত আপনি কোনও ধাপে ধাপে কোনও নির্দেশনা পাবেন না, এর এতগুলি ক্ষমতা রয়েছে। একটি ভাল পদক্ষেপ এডিসিতে শুরু করা গাইডের দিকে এগিয়ে যাওয়া: http://developer.apple.com/macosx/launchd.html

এছাড়াও আপনি জন্য man পৃষ্ঠা পড়তে পারেন launchd, launchctlএবং .plist ফাইল সিনট্যাক্স launchd.plist

আপনার এজেন্ট বা ডিমন কোথায় রাখবেন সে সম্পর্কে প্রায়শই ভুল বোঝাবুঝি হয়, সুতরাং আমাকে এটি সম্পর্কে কিছু তথ্য এখানে চাপিয়ে দেওয়া হোক:

  • যদি কোনও ব্যবহারকারী লগইন না করা অবস্থায়ও আপনার কাজটি চালানোর দরকার হয় তবে এটিকে / লাইব্রেরি / লঞ্চডেমনে রাখুন।
  • ব্যবহারকারীরা যখন লগ ইন থাকে কেবল তখনই তা কার্যকর হয়, এটিকে / গ্রন্থাগার / লঞ্চআজেন্টসগুলিতে অথবা নির্দিষ্ট ব্যবহারকারীদের ব্যক্তিগত লঞ্চ এজেন্ট ডিরেক্টরিতে (~ / লাইব্রেরি / লঞ্চ এজেন্টস) রাখুন।
  • সিস্টেম / সরবরাহিত ডেমোনগুলির জন্য সংরক্ষিত / সিস্টেম / লাইব্রেরিতে আপনার কাজটি রাখবেন না।
~/Library/LaunchAgents         Per-user agents provided by the user.
/Library/LaunchAgents          Per-user agents provided by the administrator.
/Library/LaunchDaemons         System wide daemons provided by the administrator.
/System/Library/LaunchAgents   Mac OS X Per-user agents.
/System/Library/LaunchDaemons  Mac OS X System wide daemons.

সংক্ষিপ্ত উত্তর:

আপনার প্লিস্ট ফাইলটির নামটি ভুল হতে পারে, এখনই পরীক্ষা করতে পারে না তবে আমি এটি সেট করে দিতাম net.madrat.utils.sync.plistunloadআপনার ফাইলটি সম্পাদনা করা হলে লোড করার আগে আপনার ডিমনটি প্রথমে কার্যকর হতে পারে ।


তথ্যের জন্য ধন্যবাদ। তবে: (1) আপনি উপরে উল্লিখিত সমস্ত দস্তাবেজ ইতিমধ্যে এবং আরও বেশ কয়েকটি পড়েছি। এজেন্টটি আরম্ভ করার উপায়টি আসলে কোথাও নেই। (কমপক্ষে, আমি এটি কোথাও খুঁজে পাইনি)) যদি আমার স্বজ্ঞাত দৃষ্টিভঙ্গি কাজ করে তবে তা ঠিক হয়ে যাবে । (২) ফাইলের নাম পরিবর্তন করাও কার্যকর হয় না। :-( ()) কিছু তথ্য পুরানো example উদাহরণস্বরূপ, তারা launchd bashডিবাগিংয়ের জন্য কমান্ডের পরামর্শ দেয় - তবে এটি চিতাবাঘের উপর কাজ করে না ( launchdসরাসরি চালু করা যায় না)
কনরাড রুডল্ফ

@ কনরাদ রুডল্ফ: আপনাকে স্বাগতম: :) ​​@ স্ক্যালার্কিং কিছু আকর্ষণীয় পয়েন্ট পেয়েছে: আপনি ফাইলটির প্রিভিশন পরীক্ষা করেছেন? নাকি সুডো কমান্ড ব্যবহার করেছেন? সঠিকভাবে কাজ করার জন্য আমাকে কখনও কখনও লঞ্চক্টেল পুনরায় বুট করতে হয়েছিল।
আরকো

3

আমি দস্তাবেজ খুঁজে পাচ্ছি না যে এটি আসলে স্ট্যান্ডার্ড আচরণ, তবে মনে হয় লঞ্চ করা প্লিজ ফাইলগুলিতে পরম পাথের প্রয়োজন requires /usr/bin/rsyncপরিবর্তে চেষ্টা করুন। আমার জন্য কাজ কর!


0

এটি ব্যবহার করে দেখুন, আমার স্ক্রিপ্টগুলি প্রোগ্রাম অংশটি ব্যবহার না করেই কাজ করে, কেবল প্রোগ্রাম আরগস ...

প্রতিস্থাপন করা

    <key>Program</key>
    <string>rsync</string>
    <key>ProgramArguments</key>
    <array>
        <string>-ar</string>
        <string>/path/to/folder/</string>
        <string>/path/to/backup/</string>
    </array>

সঙ্গে

    <key>OnDemand</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>rsync</string>
        <string>-ar</string>
        <string>/path/to/folder/</string>
        <string>/path/to/backup/</string>
    </array>

0

আপনার প্লাস্ট ফাইলটিতে এই কীগুলি যুক্ত করার চেষ্টা করুন

    <key>KeepAlive</key>
    <true/>
    <key>RunAtLoad</key>
    <true/>

0

আপনার .plist ফাইলটিতে আপনার একটি ভুল জিনিস রয়েছে এবং একটি ছদ্মবেশী জিনিস (এই উত্তরগুলির প্রতিটি উত্তর পূর্ববর্তী উত্তরে স্পর্শ করা হয়েছে; আমি সেগুলি এখানে একত্রিত করছি)।

আপনি আরও ভাল লিখতে চাই:

<key>ProgramArguments</key>
<array>
  <string>/usr/local/bin/rsync</string>
  <string>-ar</string>
  <string>/path/to/folder/</string>
  <string>/path/to/backup/</string>
</array>

ProgramArgumentsঅ্যারেতে প্রথম যুক্তিটি হ'ল প্রোগ্রামটি কার্যকর করা হয় - আপনি এটি বাদ দিতে পারেন। যদি Programকীটি বাদ দেওয়া হয়, তবে এটির প্রথম যুক্তির ডিফল্ট হয় ProgramArguments; এটি একবারে নির্দিষ্ট করা সম্ভবত বুদ্ধিমানের কাজ।

কারণ আপনি এই প্রথম আর্গুমেন্ট বাদ দেওয়া, আপনার .plist হবে (নাম হচ্ছে এর মাধ্যমে করা হলে rsync আছে Program), কিন্তু rsync এর 'প্রথম আর্গুমেন্ট' হতো /path/to/folder, এবং -ar(দৌড়ানো প্রোগ্রাম খুব সংক্ষিপ্তভাবে দৃশ্যমান হয়েছে হবে psআউটপুট, আগে এটা দিয়ে প্রস্থান করেছে একটি ত্রুটি, তবে নাম হিসাবে চিহ্নিত করা হয়েছে -ar, যা জেরোথ যুক্তির সামগ্রী)

আপনি না আছে পাথ অন্তর্ভুক্ত করা rsync, কিন্তু প্রসঙ্গের এই ধরনের, এটা সম্ভবত ভাবে সেটি করবেন সেই উপর নির্ভর করতে হচ্ছে এড়াতে বিচক্ষণ এর PATHউপযুক্তভাবে স্থাপন করা হচ্ছে।

এর জন্য ডকুমেন্টেশন রয়েছে launchd.plist(5)। নোট করুন যে ম্যানপেজটি জোর দেয় যে ProgramArgumentsকীটির মানটি প্রেরণ করা হয়েছে execvp(3)। এটি execvpম্যানপেজ যা PATH অনুসন্ধান সম্পর্কে ব্যাখ্যা করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.