উপরের উত্তরগুলি হ'ল এটি করার মানক / "ডান" উপায়।
আরও "পদ্ধতির ব্যবহারকারী" দৃষ্টিকোণ থেকে সহজতর যে কোনও নির্ধারিত বা ব্যাকগ্রাউন্ড টাস্কের একটি আউটপুট "লগ" ফাইলটিতে লিখতে হবে। ফাইলটি আপনার সিস্টেমে যে কোনও জায়গায় থাকতে পারে, তবে যদি কাজটি রুট হিসাবে চলছে (থেকে cron
, ইত্যাদি), তবে কোথাও কোথাও /var/log
এটি রাখা ভাল জায়গা।
আমি /var/log/maint
ডিরেক্টরিটি তৈরি করেছি এবং এটিকে সবার দ্বারা পঠনযোগ্য করে তুলেছি এবং আমার কাছে একটি "পঠনযোগ্য ফাইল রয়েছে যার নাম" ব্যাকআপ "রয়েছে যেখানে আমি আমার ব্যাকআপ স্ক্রিপ্টগুলি থেকে আউটপুট লগইন করি।
আমি আমার নিজস্ব ডিরেক্টরি তৈরি করেছি যাতে আমার ফাইলগুলি সিস্টেমের দ্বারা উত্পাদিত জিনিসগুলির সাথে মিশ্রিত না হয়।
সেখানে স্টাফ রাখতে (ব্যাশে):
BACKUP="/var/log/maint/backup"
echo "my message" >> "${BACKUP}"
>>
কারণ বার্তা পরিবর্তে এটি প্রতিটি সময় মুছে ফাইলে যোগ করা হবে।
যদি আমার স্ক্রিপ্টের অনেক আউটপুট থাকে তবে আমি স্ক্রিপ্ট বা আউটপুট জন্য ফাংশন ব্যবহার করি যাতে সমস্ত কিছু একই হয়। নীচে আমার বর্তমান (ওভারকিল সংস্করণ): (আমি যখন কোনও টার্মিনাল থেকে স্ক্রিপ্টটি চালাচ্ছি এবং ডিবাগিংয়ের উদ্দেশ্যে কী চলছে তা দেখতে ভেরবস স্টাফ রয়েছে))
#!/bin/bash
## backup_logger
## backup system logging module
## Copyleft 01/20/2013 JPmicrosystems
## Usage is ${SCRIPT_NAME} [-v] [<caller> <log message text>]
## If present, -v says log to console as well as to the log file
## <caller> is the name of the calling script
## If <caller> <log message text> is not present, write a blank line to the log
## Must be placed in path, like ~/bin
## If log is owned by root or another user, then this must run as root ...
## If not, it just aborts
##source "/home/bigbird/bin/bash_trace" ## debug
SCRIPT_NAME="$(basename $0)"
USAGE="Usage is ${SCRIPT_NAME} [-v] [<caller> <log message text>]"
SYSLOGDIR='/var/log/maint'
SYSLOGFILE="${SYSLOGDIR}/backup.log"
LOGGING=1
VERBOSE=0
if [ "${1}" == "-v" ]
then
VERBOSE=1
shift
fi
##LOGGING=0 ## debug
##VERBOSE=1 ## debug
## Only zero or two parameters allowed - <caller> <log message text>
RC=0
if [ "$#" -eq 1 ] || [ "$#" -gt 2 ]
then
echo "${USAGE}"
RC=1
else
if [ ! -w "${SYSLOGFILE}" ]
then
touch "${SYSLOGFILE}"
if [ $? -ne 0 ]
then
echo -e "$(date) ${1} ${2}"
echo "${SCRIPT_NAME} Can't write to log file [${SYSLOGFILE}]"
RC=1
exit ${RC}
fi
fi
if [ -n "${1}" ]
then
(( LOGGING )) && echo -e "$(date) ${1} ${2}" >> "${SYSLOGFILE}"
(( VERBOSE )) && echo -e "$(date) ${1} ${2}"
else
(( LOGGING )) && echo "" >> "${SYSLOGFILE}"
(( VERBOSE )) && echo ""
fi
fi
exit $RC
সম্পাদনা করুন: সরলবাদী at
উদাহরণ যা কোনও ব্যবহারকারীর ফাইলে লেখেন
এটি চিরকালের জন্য ব্যবহৃত হয়নি, তাই আমি বেশ কয়েকটি সাধারণ স্ক্রিপ্ট দিয়ে এটিকে বুঝতে পেরেছি।
প্রথম স্ক্রিপ্টটি কেবল ইভেন্টটি ব্যবহার করে শিডিয়ুল করে at
। কমান্ডটি কেবলমাত্র একটি টার্মিনালে টাইপ করা যেতে পারে তবে আমি অলস - বিশেষত যখন কমান্ডের ইতিহাসের সাথে বোকা না করে এটি পরীক্ষা করার সময় আমাকে একাধিকবার করতে হয়।
#!/bin/bash
## mytest_at_run
## Schedule a script to run in the immediate future
echo "/home/bigbird/bin/mytest_at_script" | at 00:56
দ্বিতীয় স্ক্রিপ্টটি হ'ল যা চালানোর সময় নির্ধারিত
#!/bin/bash
## mytest_at_script
## The script to be run later
echo "$(date) - is when this ran" >> /home/bigbird/log/at.log
আমি একটি পাঠ্য সম্পাদকে উভয় স্ক্রিপ্ট তৈরি করেছি, সেগুলি সংরক্ষণ করেছি এবং তারপরে এগুলি ব্যবহার করে প্রতিটি নির্বাহযোগ্য করে তুলেছি chmod 700 script-file-name
। আমি তাদের উভয়ই আমার $HOME/bin
ডিরেক্টরিতে সুবিধার জন্য রেখেছি তবে তারা যে কোনও জায়গায় আমার ব্যবহারকারীর সম্পূর্ণ অ্যাক্সেস থাকতে পারে। আমি 700
যে কোনও স্ক্রিপ্টের জন্য ব্যবহার করি যা কেবল পরীক্ষার জন্য, তবে একটি একক ব্যবহারকারী সিস্টেমে, এটি ঠিক ততই হতে পারে 755
।
আমার কাছে ইতিমধ্যে একটি ডিরেক্টরি রয়েছে যার /home/bigbird/log
থেকে আউটপুট সংরক্ষণ করতে হবে mytest_at_script
। এটি আপনার ব্যবহারকারীর সম্পূর্ণ অ্যাক্সেসের যে কোনও জায়গায় হতে পারে। স্ক্রিপ্টটি চলার আগেই এটি বিদ্যমান আছে কিনা তা নিশ্চিত করুন বা স্ক্রিপ্টটি তৈরি করার আগে এটি নিশ্চিত করুন।
এটি চালানোর জন্য, আমি কেবল ভবিষ্যতে at
কমান্ডের সময়টি কিছুটা সময় পেয়েছি mytest_at_run
এবং তারপরে এটি টার্মিনাল থেকে চালিয়েছি। আমি তখন অপেক্ষা করছিলাম যতক্ষণ না এটি চলে এবং এর সামগ্রীগুলি পরীক্ষা করে $HOME/log/at.log
।
bigbird@sananda:~/bin$ cat ~/log/at.log
Fri Sep 14 00:52:18 EDT 2018 - is when this ran
Fri Sep 14 00:56:00 EDT 2018 - is when this ran
bigbird@sananda:~/bin$
কয়েকটি নোট:
যদিও আমি at
আমার ব্যবহারকারীর কাছ থেকে চালাচ্ছি , এটি আমার PATH
এবং আমার হোম ডিরেক্টরি হিসাবে আমার পরিবেশটি জানে না , তাই আমি এটি ধরে নিই না। আমি যে কোনও cron
কাজের জন্য চাই পুরো পথ ব্যবহার করি । এবং যদি আমি কখনই এটি একটি cron
চাকুরী করতে চাই , কেবল এটি চালানোর জন্য আমাকে কোনও পরিবর্তন করতে হবে না।
আমি ব্যবহৃত >>
মধ্যে mytest_at_script
লগ ফাইল সংযোজন আউটপুট পরিবর্তে >
যা প্রতি চালনার এটি প্রতিস্থাপিত হবে। যে কোনও একটি আপনার অ্যাপ্লিকেশনটির পক্ষে উপযুক্ত।
sleep 3m; echo Running