প্রস্থান স্থিতির উপর নির্ভর করে MAILTO এ ক্রোন ইমেল আউটপুট রয়েছে Have


11

আমার পিএইচপি কমান্ডের মতো ক্রোন জব রয়েছে:

php /path/to/script.php > dev/null

এটি কেবলমাত্র STDERR আউটপুট মেল্টোর ঠিকানায় প্রেরণ করবে। আমি যা সংগ্রহ করি তা থেকে পিএইচপি স্ক্রিপ্টের প্রস্থান স্থিতি 1 হওয়ার পরেও কোনও এসটিডিআরআর তথ্য আউটপুট দেয় না।

আমি কীভাবে পিএইচপি কমান্ডের (এসটিডিআউট) আউটপুট পেতে পারি এবং প্রস্থান স্থিতি শূন্য না হলে কেবল মেল্টোর কাছে পাঠাতে পারি?

উত্তর:


12
php /path/to/script.php > logfile || cat logfile; rm logfile

যা স্ট্যান্ডার্ড আউটপুটটিকে এতে umpsুকিয়ে দেয় logfileএবং স্ক্রিপ্ট ব্যর্থ হলে (অ-শূন্য থেকে প্রস্থান করে) কেবল এটিকে আউটপুট দেয়।

দ্রষ্টব্য: যদি আপনার স্ক্রিপ্টটি যদি আউটপুটও দিতে পারে stderrতবে আপনার পুনঃনির্দেশ stderrকরা উচিত stdout। অন্যথায় মুদ্রিত যে কোনও কিছুই stderrক্রোনকে ইমেল প্রেরণের কারণ হিসাবে প্রস্থান কোড 0:

php /path/to/script.php > logfile 2>&1 || cat logfile; rm logfile

এটি স্ট্যাডারে উপস্থিত হওয়ার জন্য যে কোনও কিছুর জন্যও কাজ করবে, যার অর্থ এই নয় যে কোনও ত্রুটি আছে (যেমন, ডিবাগ আউটপুট)।
হফম্যানক

3

আপনি আরও ব্যবহার থেকে ক্রনিক বিবেচনা করেছেন ? আমি মনে করি এটি আপনি যা চান ঠিক তেমন করে:

দীর্ঘস্থায়ী একটি কমান্ড চালায় এবং এর কমান্ডটি ব্যর্থ হলে (ননজারো বা ক্র্যাশগুলি প্রস্থান করে) কেবলমাত্র তার স্ট্যান্ডার্ড আউট এবং স্ট্যান্ডার্ড ত্রুটি প্রদর্শিত হবে। কমান্ডটি সফল হলে, কোনও বহিরাগত আউটপুট লুকানো থাকবে।

সাম্প্রতিক যাচাই-বাছাইয়ের ক্ষেত্রে, স্ট্যাডারকে -eকিছু লেখা থাকলে পুরো আউটপুটটিও দেখানোর জন্য একটি সুইচ রয়েছে।


2

যেহেতু প্রস্থান স্থিতি পরিচিত হওয়ার আগে আউটপুট উত্পন্ন হয়, তাই আপনাকে এটি অন্য কোথাও সংরক্ষণ করতে হবে।

একটি সম্ভাবনা এটি শেল ভেরিয়েবলে সংরক্ষণ করা হয়:

output=$(php /path/to/script.php)
if [ $? -ne 0 ]; then
  printf "%s\n" "$output"
fi

এটি স্ক্রিপ্টের আউটপুট পুরোপুরি সংরক্ষণ করে না (এটি ফাঁকা রেখাগুলি সরিয়ে ফেলবে), তবে এই ব্যবহারের ক্ষেত্রে এটি ঠিক। আপনি যদি ফাঁকা ফাঁকা রেখাগুলি সংরক্ষণ করতে চান:

output=$(php /path/to/script.php; ret=$?; echo a; exit $ret)
if [ $? -ne 0 ]; then
  printf "%s" "${output%a}"
fi

যদি সম্ভাব্যভাবে প্রচুর আউটপুট থাকে তবে আপনি এটি পরিবর্তে একটি অস্থায়ী ফাইলে সংরক্ষণ করতে পছন্দ করতে পারেন:

output_file=$(mktemp /var/tmp/script.XXXXXXXXXX.out)
php /path/to/script.php >>"$output_file"
ret=$?
if [ $ret -ne 0 ]; then
  echo "script.php failed (status $ret), see the output in $output_file"
fi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.