CRON (শংসাপত্রগুলি) থেকে AWS CLI চালানো যায় না


27

একটি সাধারণ অ্যাডাব্লুএস সিএলআই ব্যাকআপ স্ক্রিপ্ট চালানোর চেষ্টা করা হচ্ছে। এটি একটি অন্তর্ভুক্ত ফাইলের লাইনগুলির মধ্য দিয়ে লুপ করে, এস 3 পর্যন্ত সেই পাথগুলিকে ব্যাক করে এবং লগ ফাইলে আউটপুট ডাম্প করে। আমি যখন এই কমান্ডটি সরাসরি চালিত করি, এটি কোনও ত্রুটি ছাড়াই চলে। আমি যখন এটি সিআরএন-এর মাধ্যমে চালনা করি তখন আমার আউটপুট লগটিতে একটি "শংসাপত্রগুলি সনাক্ত করতে অক্ষম" ত্রুটি পাই।

শেল স্ক্রিপ্ট:

AWS_CONFIG_FILE="~/.aws/config"

while read p; do
 /usr/local/bin/aws s3 cp $p s3://PATH/TO/BUCKET --recursive >> /PATH/TO/LOG 2>&1
done </PATH/TO/INCLUDE/include.txt

আমি ত্রুটিটি দেখা শুরু করার পরে কনফিগার ফাইলে কেবল লাইনটি যুক্ত করেছি, ভেবে এই এটি ঠিক করতে পারে (যদিও আমি নিশ্চিত যে এডাব্লুএস ডিফল্ট হিসাবে দেখায়))

শেল স্ক্রিপ্ট মূল হিসাবে চলমান। আমি নির্দিষ্ট স্থানে অ্যাডাব্লুএস কনফিগারেশন ফাইলটি দেখতে পাচ্ছি। এবং এগুলি আমার কাছে ভাল দেখাচ্ছে (যেমন আমি বলেছিলাম, এটি CRON এর বাইরে খুব ভাল চলছে)।


2
একটি নিখুঁত পথ চেষ্টা করুন ~/.aws/config
ceejayoz

অবশ্যই প্রথমে চেষ্টা করেছেন (/root/.aws/config ব্যবহার করছেন), তবে অন্য কয়েকটি থ্রেডে দেখে ~ / এ ফিরে ফিরে এসেছিলেন। একইভাবে ত্রুটি।
বাইনারিঅরজ্যানিক

2
সরাসরি উত্তর নয় বরং এপিআই কীগুলি ব্যবহার সম্পর্কে একটি মন্তব্য: আপনার দৃষ্টান্তগুলিতে ভূমিকা অর্পণ করা, এবং সেই ভূমিকাগুলির চারপাশে নীতিমালা তৈরি করা আরও ভাল অনুশীলন (এবং আরও সহজ), এবং তারপরে আপনাকে কীগুলি নির্দিষ্ট করার প্রয়োজন নেই, বা উদাহরণস্বরূপ এগুলিকে প্রায় সরলরে lying দুর্ভাগ্যক্রমে এটি কেবল উদাহরণ তৈরির সময় নির্দিষ্ট করা যেতে পারে। সরাইয়া হিসাবে, লগফাইলে অনুলিপি করার জন্য (এবং ব্যাকআপগুলি ইত্যাদি) এস 3 সিএমডি সরঞ্জামগুলিতে নজর দিন, যা আরএসসি-এর মতো কার্যকারিতা সরবরাহ করে।
নিকো

উত্তর:


20

যদি আপনি এটি সরাসরি চালনা করেন তবে ক্রোন থেকে নয় এটি যদি কাজ করে তবে সম্ভবত পরিবেশে অন্যরকম কিছু রয়েছে। আপনি ইন্টারেক্টিভ করে আপনার পরিবেশ সংরক্ষণ করতে পারেন

set | sort > env.interactive

এবং আপনার স্ক্রিপ্টে একই জিনিস

set | sort > /tmp/env.cron

এবং তারপরে diff /tmp/env.cron env.interactiveএবং দেখুন কী গুরুত্বপূর্ণ। এর মতো জিনিসগুলি PATHসম্ভবত সম্ভাব্য অপরাধী।


4
ধন্যবাদ! সমস্যাটি নিজেরাই সমাধান করতে সক্ষম হবার এক পদক্ষেপটি মূলত অমূল্য। প্যাথ ভেরিয়েবলের মধ্যে অবশ্যই বেশ কয়েকটি পার্থক্য ছিল এবং আমি মনে করি এই ক্ষেত্রে হোমের পার্থক্য যা জিনিস ফেলে দিয়েছিল। আমার নির্দিষ্ট ইস্যু হিসাবে, আমি কেবল এটি ব্যবহারকারীর ক্রোন ফাইল থেকে / etc / crontab এর পরিবর্তে চালাচ্ছি যা আমার শেষের সবকিছু সমাধান করেছে। আবার ধন্যবাদ!
বাইনারিঅরজানিক

ঠিক। স্ক্রিপ্টে একটি সঠিক PATHভেরিয়েবল যুক্ত করা ( echo $PATHএটি কী হবে তা বলবে) সাধারণত এটি সমাধান করে।
ফ্র0zenFyr

33

আপনি যখন ক্রন্টব থেকে কাজ চালান, আপনার $HOMEপরিবেশের পরিবর্তনশীল/

অ্যামাজন ক্লায়েন্টের জন্য অনুসন্ধান করা হয়

~/.aws/config

অথবা

~/.aws/credentials

যদি $HOME= /, তবে ক্লায়েন্ট সেই ফাইলগুলি খুঁজে পাবে না

এটি কার্যকর করতে, আপনার স্ক্রিপ্টটি আপডেট করুন যাতে এটির জন্য একটি আসল হোম ডিরেক্টরি রফতানি করে $HOME

export HOME=/root

এবং তারপরে একটি কনফিগার বা শংসাপত্র ফাইল রাখুন

/root/.aws/

এটি স্ট্যাকওভারফ্লো.com/a/26480929/354709 থেকে নিম্নলিখিত ফিক্সের সাথে সাহায্য করেছে যা আউস কমান্ডের জন্য নিখুঁত পথ যুক্ত করেছে - যেমন user PATH মূল ব্যবহারকারীকে সঠিকভাবে সেট করা হয়নি।
ড্যান স্মার্ট

2
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
ম্যাডব্রেকস

6

আমি নিম্নলিখিতটির মাধ্যমে এই সমস্যাটি সমাধান করতে সক্ষম হয়েছি :

export AWS_CONFIG_FILE="/root/.aws/config"
export AWS_ACCESS_KEY_ID=XXXX
export AWS_SECRET_ACCESS_KEY=YYYY

1
তবে করার সম্পূর্ণ বিষয়টি aws configureআপনাকে যাতে শংসাপত্রগুলি যেমন স্ক্রিপ্টগুলিতে রাখতে না হয়। এটি সঠিকভাবে সমাধান করতে @ চিক্স পোস্ট করেছেন উত্তর দেখুন See
ম্যাডব্রেকস

1
স্ক্রিপ্টগুলিতে সংরক্ষণ AWS_ACCESS_KEY_IDএবং AWS_SECRET_ACCESS_KEYমান রাখবেন না। প্রথম লাইনে ইতিমধ্যে সেই মানগুলি সরবরাহ করা উচিত ছিল।
এইউইপ্পলার 14

2

আপনার কমান্ড লাইনটি ক্রোনটাব -e-তে কার্যকর করার আগে এই কোডটি রাখুন

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

আমি ভিন্ন সমাধানের সাথে প্রথম সমাধানটি চেষ্টা করেছিলাম তবে কিছুই নয়। আমার জন্য কৌশলটি ছিল প্যাথ ভেরিয়েবল।
borracciaBlu

1

অ্যাউজ ক্লাইনের সরঞ্জামের বাইনারিগুলি ইনস্টল করা আছে /usr/local/bin/aws

আমার ত্রুটিটি হ'ল ক্রোন ব্যবহারকারী /usr/local/bin/awsচলমান অবস্থায় অ্যাক্সেস করতে পারেনি ; এটি কেবল অ্যাক্সেস করতে পারে/usr/bin/

আমি যা করেছি তা হ'ল /usr/binনীচের কমান্ডটি দিয়ে aws এর জন্য একটি লিঙ্ক তৈরি করা ।

root@gateway:~# ln -s /usr/local/bin/aws /usr/bin/aws

আমি আমার স্ক্রিপ্টে কিছু পরিবর্তনও যুক্ত করেছি; এখানে একটি নমুনা ফাংশন:

starter () {
    echo "
    ==================================================

    Starting Instance

    ==================================================
    "

    /usr/bin/aws ec2 start-instances --instance-ids $instance --region us-east-1

    sleep 30

    echo "Assigning IP Address "

    /usr/bin/aws ec2 associate-address --instance-id $instance  --region us-east-1 --public-ip XX.XX.XX.XX

}

এবং ক্রোন প্রবেশ:

30 5 * * * sh /usr/local/cron/magentocron.sh

এই পদ্ধতিটি আমার পক্ষে কাজ করেছিল।


মনসুর, আপনার উত্তর বিন্যাস সম্পূর্ণরূপে নষ্ট হয়ে গেছে।
আলডেকইন

সম্পূর্ণ পথ ব্যবহার /usr/bin/awsকরা সমাধানের মূল চাবিকাঠি।
রামরতন গুপ্ত

1

.bashrcব্যবহারকারীর জন্য ডিফল্ট ফাইলে থাকা এই লাইনটি অ-ইন্টারেক্টিভ শেলগুলি সম্পূর্ণ ব্যবহারকারীর পরিবেশ (PATH ভেরিয়েবল সহ) পেতে বাধা দেবে:

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

$HOME/.bashrcঅ-ইন্টারেক্টিভ প্রসঙ্গ থেকে কার্যকর করার অনুমতি দেওয়ার জন্য লাইনটি আউট মন্তব্য করুন ।

sourceপরিবেশটি সঠিকভাবে সেট আপ করতে আমাকে আমার শেল স্ক্রিপ্টে একটি স্পষ্ট কমান্ড যুক্ত করতে হয়েছিল:

#!/bin/bash
source $HOME/.bashrc

অতিরিক্ত তথ্যের জন্য এই উত্তরটি দেখুন ।


1

আমরা সবাই জানি যে পরিবেশের পথ পরিবর্তনশীল $ PATH এর বাইনারিগুলির অবস্থান রয়েছে। Cr ক্রোনটাবের পাঠ্যপথের অবস্থান অজস্র নাও থাকতে পারে।

আপনি যা করতে পারেন তা হ'ল অ্যাডস্ক্লির বাইনারি পথ।

# which aws
/usr/local/bin/aws

এবং আপনার স্ক্রিপ্টের শুরুতে (শেবাংয়ের পরে) নীচে লাইন যুক্ত করে ont PATH ক্রোনটাব-তে পথ যুক্ত করুন।

PATH=$PATH:/usr/local/bin/

এটি আমার জন্য কাজ করেছে !!!


আপনার উত্তর আমার জন্য কাজ করে। এক ঘন্টা আমার মাথা আঁচড়ানো। ধন্যবাদ, বন্ধু
হুসেন 7

0

আমি জানি এটি নিখুঁত সমাধান নয় তবে এটি আমার পক্ষে কাজ করেছে:

export HOME=/home/user
export AWS_CONFIG_FILE="/home/user/.aws/config"
export AWS_ACCESS_KEY_ID=XXX
export AWS_SECRET_ACCESS_KEY=XXX

0

awscliপিআইপি-র মাধ্যমে ইনস্টল হওয়া সরঞ্জামটি ব্যবহার করার সময় আমি খুঁজে পেয়েছি যে নতুন বাশ সংস্করণ নিয়ে আমি সমস্যা বোধ করছিলাম আমি খুঁজে পেয়েছি যে নতুন ব্যাশ সংস্করণগুলির সাথে এই সরঞ্জামটির সাথে কিছুই কাজ করবে না।

আমি এটি ইনস্টল করে সমাধান করতে সক্ষম হয়েছি aws-apitools-ec2ইনস্টল করে

yum install -y aws-apitools-ec2 

আমি আরও রেফারেন্সের জন্য এর গাইডটি সংযুক্ত করছি।

http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ec2-clt.pdf


উবুন্টু 16.04 এ আমি প্যাকেজটি খুঁজে পাইনি।
borracciaBlu

0

আমার একই সমস্যা ছিল, তবে আমার ক্রোন এন্ট্রি ( 2>@1) থেকে স্ট্যাডার পুনঃনির্দেশ করার পরে , আমি লগটিতে দেখেছি aws: command not found

এটি হ'ল কারণ এডাব্লুএস ক্লাইটি ব্যবহারকারীর হোম ফোল্ডারে ইনস্টল করা ছিল এবং আমি আমার ব্যবহারকারীর .bash_profileসাথে অ্যাডাব্লুএস ক্লাইম পাথ যুক্ত করতে একটি লাইন যুক্ত করেছি $PATH। অদ্ভুতভাবে, এটি আসলে যেভাবে অ্যাডাব্লুএস ক্লাইম ইনস্টল ডকুমেন্টেশন আপনাকে এটি ইনস্টল করতে বলেছে। তবে ব্যবহারকারীর .bash_profileক্রন্টব চালানো হলে ব্যবহারকারীর ব্যবহার হয় না (অন্তত যাইহোক আমার পরিবেশে নেই)।

সুতরাং আমি এটিকে ঠিক করার জন্য যা করেছি তা হ'ল এটি নিশ্চিত করা হয়েছিল যে আমার ক্রোনটব স্ক্রিপ্টটির পথেও আউস ক্লিপ রয়েছে। আমার স্ক্রিপ্টের শেবাংয়ের নীচে, এখন আমার আছে PATH=~/.local/bin:$PATH


0

আমার জন্য এটি কৌশলটি করেছে:

#!/bin/bash

HOME=/home/ubuntu
AWS_CONFIG_FILE="/home/ubuntu/.aws/config"

aws ec2 describe-instances #or whatever command you need to use.

আজকের ইসি 2 উদাহরণের ডিফল্ট ব্যবহারকারী হলেন উবুন্টু এবং মূল ফোল্ডারটি হ'ল ব্যবহারকারীদের ফোল্ডার। সেখানেই আউজের ক্লিপ বিদ্যমান।


0

সেরা নয়, তবে এডাব্লুএস ক্লায়েন্টের আদেশের আগে আমাকে আমার শেল / ব্যাশ স্ক্রিপ্টে সরাসরি কনফিগারেশন সরবরাহ করতে হয়েছিল। মত:

#!/bin/bash

export AWS_ACCESS_KEY_ID=<ZZZ>
export AWS_SECRET_ACCESS_KEY=<AAA>
export AWS_DEFAULT_REGION=<BBB>
aws s3 cp ....
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.