ओएस एक्स से लॉग इन और आउट करने पर मैं हर बार स्क्रिप्ट को कैसे निष्पादित कर सकता हूं?


4

मैं जो चाहता हूं, वह चर के साथ एक URL को एक सर्वर पर भेजना है जो किसी के मौजूद होने पर ट्रैक करेगा जब वह अपने कार्य केंद्र के लॉगिन और लॉगआउट के आधार पर मौजूद होगा।

मैंने "/User/Username/Desktop/script.sh" LoginHookमें सेट करने का प्रयास किया है com.apple.loginwindowscript.shकाम करता है जब मैं इसे टर्मिनल से खुद को निष्पादित करता हूं, लेकिन यह से नहीं चलता है LoginHook

स्क्रिप्ट निम्नलिखित को निष्पादित करती है, जहां $USERवर्तमान में लॉग इन उपयोगकर्ता का नाम होना चाहिए:

curl -kd "author=$USER&type=inout&message=in" https://some.server.com/timetrack

मुझे पूरा यकीन है कि आप $USERयहाँ उपयोग नहीं कर सकते । क्या आप जानते हैं कि स्क्रिप्ट बिल्कुल निष्पादित होती है या नहीं?
slhck

हां, मैं भी यही सोच रहा था, लेकिन यहां तक ​​कि एक साधारण स्पर्श स्क्रिप्ट भी काम नहीं करेगी ... क्या कोई अन्य तरीका है जो मैं जांच सकता हूं कि क्या स्क्रिप्ट निष्पादित हो रही है?
बर्नक

और अगर मैं यहां $ USER का उपयोग नहीं कर सकता, क्योंकि स्क्रिप्ट को रूट के रूप में निष्पादित किया जाना चाहिए, तो मैं लॉगिन / लॉगआउट पर एक स्क्रिप्ट को कैसे निष्पादित कर सकता हूं जो वर्तमान उपयोगकर्ता का नाम सर्वर पर भेजता है?
बर्नक

1
मैंने आपके प्रश्न को यह बताने के लिए कहा कि आप क्या हासिल करना चाहते हैं, आशा है कि यह समझ में आता है। अभी मैक पर नहीं, इसलिए मैं परीक्षण नहीं कर सकता। सिद्धांत रूप में लॉगिन / लॉगआउट हुक को काम करना चाहिए, देखें: ओएस एक्स में लॉगिन / लॉगआउट पर स्क्रिप्ट कैसे चलाएं? क्या आपने #!/bin/bashअपनी स्क्रिप्ट की शुरुआत में सेटिंग करने की कोशिश की है ? ऐसा लगता है कि आप $1इसके बजाय स्क्रिप्ट के साथ उपयोगकर्ता नाम प्राप्त कर सकते हैं $USER
slhck

धन्यवाद, मैं कोशिश करूँगा कि। आप लोग प्रश्न और टिप्पणियों में कोड के रूप में सामान कैसे चिह्नित करते हैं? मैं हमेशा यह भूल जाता हूं।
बजे bernk

जवाबों:


2

ओएस एक्स में लॉगिन / लॉगआउट पर स्क्रिप्ट चलाने के तरीके के रूप में LoginHookऔर के LogoutHookरूप में वर्णित का उपयोग करना शायद सबसे आसान तरीका होगा। यह पदावनत माना जाता है, लेकिन 10.8 तक काम करता है और इससे आगे भी काम कर सकता है।

सुनिश्चित करें कि आपकी स्क्रिप्ट में एक सही हैशबैंग है, इसलिए लॉन्चिंग प्रक्रिया को पता चल जाएगा कि इसे कैसे निष्पादित करना है। आखिरकार आपकी स्क्रिप्ट रूबी से लेकर पायथन या बस बैश तक कुछ भी हो सकती है।

इसलिए, उदाहरण के लिए:

sudo defaults write com.apple.loginwindow LoginHook /usr/local/bin/curl.sh

और /usr/local/bin/curl.shजा रहा है:

#!/bin/bash
curl -kd "author=${1}&type=inout&message=in" https://some.server.com/timetrack

लॉगिन करने वाले उपयोगकर्ता तक पहुंचने के लिए, आपको $1इसके बजाय उपयोग करने की आवश्यकता है $USERक्योंकि उत्तरार्द्ध एक चर है जो केवल एक वास्तविक शेल वातावरण में मौजूद है, जो मौजूद नहीं है यदि आप लॉगिन स्क्रिप्ट का उपयोग करते हैं।


बहुत बढ़िया जवाब। मुझे यकीन है कि यह भविष्य में किसी की मदद करेगा। जिज्ञासा से बाहर, अगर LoginHookयह माना जाता है कि ऐसा करने का अधिक वर्तमान तरीका क्या होगा?
बर्नक

आपको एक launchdनौकरी बनाने की आवश्यकता होगी - हालाँकि इसके लिए आपको XML .plistफ़ाइल लिखने की ज़रूरत होगी जो नौकरी का वर्णन करती है और फिर उसे लोड करती है। लॉगिन हुक का उपयोग करना बहुत आसान है, लेकिन निश्चित रूप से कमियां यह हैं कि आप एक समय में केवल एक का उपयोग कर सकते हैं।
slhck
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.