الأوامر التي تعمل في Terminal ، ولكن ليس في Bash Script

1

أنا مسؤول النظام لزوجين من خوادم الويب التي تم نشرها مع لوحة استضافة cpanel. أحاول أن أنهي ببرنامج نصي احتياطي. هناك أمرين مجمعين مع Cpanel ، سيتم استخدامهما في هذا البرنامج النصي. هذه الأوامر ؛

1. whmapi1 modifyacct user=USERNAME BACKUP=[01]

This Command has booleans to set, what it does is either enable or disable backup for a specific user.

2. /usr/local/cpanel/bin/backup --force

Once backup is enabled for a user/users, then this command starts the backup process on the server.

حتى هنا هو منطق البرنامج النصي والسيناريو.

#!/bin/bash

المصفوفات

L=($( comm -23 <(du -h --max-depth=1 /home 2>/dev/null | grep G |  awk -F"/" '{print $NF}' | sort | egrep -vw '(home|virtfs)') <(ls -al /var/cpanel/suspended/ | grep -v 'lock' | sort) ))

Above Array contains all the account whose home directories have exceeded 1GB limit.

S=($(comm -23 <(du -h --max-depth=1 /home 2>/dev/null | egrep -v '(!G|.cp|cP|clamav)' | awk -F"/" '{print $NF}' | sort | egrep -vw '(home|virtfs)') <(ls -al /var/cpanel/suspended/ | grep -v 'lock' | sort) ))

Above Array contains all the account whose home directories are less than 1GB limit.

whmapi1 modifyacct user=${L[@]} BACKUP=0 && whmapi1 modifyacct user=${S[@]} BACKUP=0

Above command disables backup for all users for start, to start from scracth.

whmapi1 modifyacct user=${S[@]} BACKUP=1

ت

his command enables backup for all accounts whose home dirs are less than 1 GB

/usr/local/cpanel/bin/backup --force

This command starts backup process for all enabled users.

المنطق هو أنني أريد إنشاء نسخة احتياطية من الحسابات الصغيرة أولاً ، ثم عند الانتهاء ، سأقوم بتشغيلها للحسابات الأكبر حجمًا.

المشكلة : يتم تنفيذ جميع الأوامر بنجاح عند تشغيلها مباشرة في الطرفية ، ولكنها لا تنفذ عند تشغيلها عبر برنامج نصي. تحدث المشكلة في الحساب تمكين وتعطيل. إما أنه يعطل الكل أو يمكّن الكل ، وليس الحسابات الجزئية ، كما يقصدها منطق البرنامج النصي.

يمكن لأي شخص أن يشير ، أين وماذا تفتقد؟ شكرا لك مقدما !!

1 إجابة

2
افضل جواب

${l[@]} يمتد إلى user1 user2 user3 ... ، وبالتالي user=${L[@]} يتوسع إلى user=user1 user2 user3 ... ، إذا كنت ترغب في المتعة لكل مستخدم ، فأنت بحاجة إلى تكرار المستخدمين.

du_buff=$(du -h --max-depth=1 /home 2>/dev/null)
lock_buff=$(ls -al /var/cpanel/suspended/ | grep -v 'lock' | sort)
L=($(comm -23 <(echo "$du_buff" | grep G |  awk -F"/" '{print $NF}' | sort | egrep -vw '(home|virtfs)') <(echo "$lock_buff") ))
S=($(comm -23 <(echo "$du_buff" | egrep -v '(!G|.cp|cP|clamav)' | awk -F"/" '{print $NF}' | sort | egrep -vw '(home|virtfs)') <(echo "$lock_buff") ))

# for every user in L and S
for user in "${L[@]}" "${S[@]}"; do
     whmapi1 modifyacct user=$user BACKUP=0
done
# for every user in S
for user in "${S[@]}"; do
     whmapi1 modifyacct user=$user BACKUP=1
done
/usr/local/cpanel/bin/backup --force
:مؤلف
فوق
قائمة طعام