init.d স্ক্রিপ্ট - অনুমতি অস্বীকৃত


1

আমি আমার সার্ভারের জন্য একটি init.d স্ক্রিপ্ট তৈরি করার চেষ্টা করছি যা টিমস্পেক সার্ভার এবং কিছু node.js অ্যাপ্লিকেশন "pm2" ব্যবহার করে শুরু / বন্ধ করবে। এখানে আমার স্ক্রিপ্ট:

#! /bin/sh

### BEGIN INIT INFO
# Provides:          my_service
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts/stops all my services
# Description:       starts/stops all my services
### END INIT INFO

echo "running script with argument: $1" >> /log.txt

case "$1" in
  start)
    /usr/local/bin/pm2 resurrect >> /log.txt 2>&1
    /home/teamspeak/ts3server_startscript.sh start >> /log.txt 2>&1
    ;;
  stop)
    /usr/local/bin/pm2 dump >> /log.txt 2>&1
    /usr/local/bin/pm2 delete all >> /log.txt 2>&1
    /home/teamspeak/ts3server_startscript.sh stop >> /log.txt 2>&1
    ;;
esac

echo "done" >> /log.txt

যেমন আপনি দেখতে পাচ্ছেন, স্ক্রিপ্টগুলি প্রতিটি কমান্ডের stdout এবং stderr /log.txt এ লগ করে।

আশ্চর্যের বিষয়টি হ'ল, আমি যখন /etc/init.d/my_service start/stopম্যানুয়ালি দৌড়ে যাই , এটি দুর্দান্ত কাজ করে। তবে আমি যখন একটি রিবুট ইস্যু করি তখন 3 pm2 কমান্ড ব্যর্থ হয়। মেশিনটির পুনরায় বুট করার পরে লগটি এখানে পেয়েছি:

running script with argument: stop
exec: 29: : Permission denied
exec: 29: : Permission denied
Stopping the TeamSpeak 3 serverdone
done
running script with argument: start
exec: 29: : Permission denied
Starting the TeamSpeak 3 server
TeamSpeak 3 server started, for details please view the log file
done

এটি কি হতে পারে আপনার কোনও ধারণা আছে? এটি কি pm2 এর সাথে সম্পর্কিত, বা এটি আমার স্ক্রিপ্টের কোনও বাগ?

আমি যা পাই না তা হ'ল আমি যখন শেলটি ব্যবহার করে ম্যানুয়ালি এটি শুরু করি তখন থেকে স্ক্রিপ্টটি পাওয়ার অফ / বুটে স্বয়ংক্রিয়ভাবে কার্যকর হয়ে যায় why


আপনি কি সত্যিই বেদনাদায়ক #! /bin/shবা আপনার আছে #!/bin/sh? স্পেস স্ল্যাশ বিন স্ল্যাশ শ এর প্রথম চেহারা ...
হেনেস

এছাড়াও, দয়া করে সেই স্ক্রিপ্টে ls -l থেকে আউটপুট পোস্ট করুন যাতে আমরা x বিট সেট করা আছে কিনা তা পরীক্ষা করতে পারি।
হেনেস

29 লাইনটি কোনটি? আপনার PATH সেটআপ করা উচিত (আপনি অ-স্ট্যান্ডার্ড (init স্ক্রিপ্টের জন্য) ডিরেক্টরিতেও কাজ করছেন you আপনি কি স্ক্রিপ্টে এবং দুপুর ২ টায় এক্সিকিউটেবল অনুমতি নির্ধারণ করেন? আমি ধরে নিই "/etc/init.d/my_service স্টার্ট / স্টপ) "আপনি শেষ স্ল্যাশের পরিবর্তে স্থান বলতে চাইছেন
গিয়াকোমো ক্যাটেনাজি

উত্তর:


1

দেখে মনে হচ্ছে আপনার কাছে দুপুর ২ টায় কল করার যথেষ্ট অনুমতি নেই। এটি সুডো দিয়ে চালানোর চেষ্টা করুন যদি এটি এখনও কাজ করে কিনা তা আপনি এখনও খুঁজে না পান।

ত্রুটিটি নিজেই দুপুর ২ টা থেকে এসে গেছে বলে মনে হচ্ছে, কারণ আপনার স্ক্রিপ্টটিতে একটি লাইন 29 নেই।

সাধারণত, স্টার্টআপে init.d বেশ কয়েকটি পৃথক অনুমতি নিয়ে বিভিন্ন ব্যবহারকারীর সাথে চলে।


আমি সুডো ইনস্টল করি নি :( স্ক্রিপ্টটি রুট হিসাবে চালানোর মতো অন্য কোনও উপায় আছে?
ভ্যান কোডিং

ঠিক আছে, তবে "su" কমান্ডটি ব্যবহার করুন এবং কমান্ডগুলি রুট হিসাবে চালিত করুন।
private_meta

তখন কি পাসওয়ার্ড চাইবে না?
ভ্যান কোডিং

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

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