launchd: একটি অবস্থান প্রবেশ করার সময় স্ক্রিপ্ট শুরু করুন


2

প্রশ্ন: একটি নির্দিষ্ট অবস্থান প্রবেশ করার সময় একটি স্ক্রিপ্ট শুরু (এবং জীবন্ত রাখা) একটি LaunchAgent কনফিগার করার একটি উপায় আছে কি?

উদাহরণ: যখন "অফিস" অবস্থানটি স্যুইচ করার সময় আমি একটি LaunchAgent ট্রিগার করতে চাই যা একটি স্ক্রিপ্ট শুরু করে যা আমার প্রয়োজন এমন SSH টানেল খোলে।


1
আপনি যদি $ 19 খরচ করতে ইচ্ছুক হন তবে আপনি অবস্থানগুলি চেষ্টা করতে পারেন: "আপনার নেটওয়ার্কগুলি পরিবর্তন এবং অবস্থানগুলি পরিবর্তন করে অবস্থানগুলি ঘড়ি দেখায়।" codehackers.net/locations । তার কর্মকাণ্ডের তালিকায় "একটি টার্মিনাল কমান্ড চালানো।" আমার মনে হয় যে অ-গাইক "শেল স্ক্রিপ্ট চালানোর জন্য" কথা বলে
Doug Harris

নাহ, আমি একটি দরিদ্র আইটি ছাত্র এবং নিজেকে দ্বারা এই হ্যাক করতে চান .. =)
lajuette

উত্তর:


2

ম্যাক ওএস এক্স একটি ফাইল আপডেট /Library/Preferences/SystemConfiguration/ নামক preferences.plist। এটি একটি কী বলা আপডেট CurrentSet বর্তমান অবস্থানের UUID এ (প্রতিটি অবস্থানটি যখন এটি তৈরি হয় তখন একটি UUID দেওয়া হয়।) আপনি যে অবস্থানটির সন্ধান করে সেই অবস্থানটির নাম নির্ধারণ করতে পারেন UserDefinedName UUID নামে একই নামের সাথে অভিধানে কী।

উদাহরণ স্ক্রিপ্ট:

#! /bin/bash

# Proof of Concept Script to check if the location changed.

CURRENT_LOCATION=`/usr/libexec/PlistBuddy -c "Print :CurrentSet" /Library/Preferences/SystemConfiguration/preferences.plist | sed 's/\/Sets\///'`
CURRENT_LOCATION_NAME=`/usr/libexec/PlistBuddy -c "Print :Sets:$CURRENT_LOCATION:UserDefinedName" /Library/Preferences/SystemConfiguration/preferences.plist`

# If location is the one we want:
# Logger puts the message into syslog

if [ $CURRENT_LOCATION_NAME == "Office" ]; then
    logger "`date` => In the Office"

    #Commands to set up SSH Tunnel among others

else
# If the location is not the one we want: Undo whatever we have done.
    logger "`date` => Out of Office"

    #Commands here for when you leave the office location
fi

উদাহরণ লঞ্চ যখনই অবস্থান পরিবর্তন হয় তখন উপরে স্ক্রিপ্ট চালানোর জন্য:

<?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>local.IDENTIFIER_HERE.SOMETHING</string>
    <key>OnDemand</key>
    <true/>
    <key>Program</key>
    <string>/PATH/TO/SCRIPT</string>
    <key>WatchPaths</key>
    <array>
        <string>/Library/Preferences/SystemConfiguration/preferences.plist</string>
    </array>
</dict>
</plist>

স্ক্রিপ্টের পথটি পূরণ করুন, এটি একটি সনাক্তকারী দিন এবং একই নাম দিয়ে এটি সংরক্ষণ করুন (যেমন। local.lajuette.location নামের একটি ফাইল থাকা উচিত local.lajuette.location.plist )। এই ফাইল অনুলিপি করুন ~/Library/LaunchAgents এবং চালানো launchctl load ~/Library/LaunchAgents/name.of.plist.here.plist। নমুনা ফাইলগুলি Console.app খুলুন এবং লাইনটির জন্য চেক করুন: "DATE ​​= & gt; অফিসে" বা "DATE ​​= & gt; অফিসের বাইরে"।

আপনি চেক আউট করতে চাইতে পারেন: ম্যাক ওএস এক্স এ প্রতিদিন চালানোর জন্য আমি কিভাবে স্ক্রিপ্ট পেতে পারি যদি আপনি নিশ্চিত না হন তবে লঞ্চড লোড ব্যবহার করে আপনার স্ক্রিপ্টটি লোড এবং রান করতে আরও তথ্যের জন্য।


ভাল লাগছে, আমি আগামীকাল এই চেষ্টা করব!
lajuette

ভোট দেওয়ার ব্যতীত (যদি আমি বুঝতে পারি যে আপনি সেখানে প্রতি পোস্টে 30 সেকেন্ডের পরিবর্তনের জন্য কীভাবে লঞ্চড পোল পোস্ট করেছেন?) এই সমাধানটি প্রায় নিখুঁত। কিন্তু ভোট আমার জন্য একটি যেতে হয়। আমি এমন একটি সংস্করণ চাই যা কিছু ইভেন্টকে আরও ভাল করে ধরে। কিন্তু আপনার জন্য 10!
lajuette

@ লাজুয়েট: যতদূর আমি জানি, লঞ্চডুকে পোল করতে হবে না - এটি FSEvents API থেকে একটি বার্তা পায় - থ্রোটল ইন্টারভারেল ব্যবহার করে (এবং এখানে যোগ করা হয়েছে) নিরাপত্তার পরিমাপ হিসাবে এটি আরও বেশি আগুন লাগাচ্ছে কিনা তা নিশ্চিত করতে 30 সেকেন্ড প্রতি একবার (যদি কিছু অদ্ভুত হয়ে যায়)। আপনি এই পরিবর্তন বা এমনকি প্রয়োজনীয় হিসাবে এই অপসারণ করতে পারেন।
Chealion

ThrottleInterval সরানো এই মানটিকে তার ডিফল্টে সেট করে: 10 যদি আপনি প্রমাণ করতে পারেন যে FSEvents API ব্যবহার করা হয়, আপনি +15 = পাবেন)
lajuette

1
যদি আপনি এটি প্রতি 10 সেকেন্ডে একবার একবার বারবার প্রয়োজন হয় তবে আপনি ThrottleInterval 0 এ সেট করতে পারেন। API কী ব্যবহার করা হয় - এটার উৎসের বাইরে কোনও ডকুমেন্টেশন নেই launchd.macosforge.org ডিফল্টরূপে এটি Kqueue ব্যবহার করে, যদি Kqueue ড্রাইভে সমর্থিত না হয় তারপর এটা ভোট হবে। (Kqueue HFS ড্রাইভে সমর্থিত)
Chealion
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.