我有一个类似下面的脚本:
脚本名称:create_and_set_quota_alternative.sh
#!/bin/bash
while IFS=$'\t' read -r -a myOptions
do
echo "directory: ${myOptions[0]}"
echo "ownership: ${myOptions[1]}"
echo "permissions: ${myOptions[2]}"
echo "quota: ${myOptions[3]}"
hdfs dfs -mkdir ${myOptions[0]}
hdfs dfs -chown ${myOptions[1]} ${myOptions[0]}
hdfs dfs -chmod ${myOptions[2]} ${myOptions[0]}
hdfs dfsadmin -setSpaceQuota ${myOptions[3]} ${myOptions[0]}
done < myFile.txt
MYFILE.TXT
/usr/t1 hive:hive 776 1T
/usr/t2 hdfs:hdfs 775 100G
现在我希望以超级用户身份登录并执行脚本。
在我的情况下,超级用户是hdfs。
我想每当我运行命令sh create_and_set_quota_alternative.sh
然后它将以超级用户身份登录hdfs并执行脚本。
请建议如何实施它。
答案 0 :(得分:1)
在while循环之前添加su hdfs
,在脚本的最后一个命令中添加exit
。
要添加sh create_and_set_quota_alternative.sh
,请使用/bin/sh
来调用脚本,但第一行表示应将其称为bash create_and_set_quota_alternative.sh
。并不总是链接到bash。
答案 1 :(得分:0)
不幸的是,我没有sudo访问权限以及hdfs密码。有人建议我这样做:
而IFS = $&#39; \ t&#39;读-r -a myOptions
DO
echo&#34;目录:$ {myOptions [0]}&#34;
echo&#34;所有权:$ {myOptions [1]}&#34;
echo&#34;权限:$ {myOptions [2]}&#34;
echo&#34; quota:$ {myOptions [3]}&#34;
sudo su hdfs -c&#34; hdfs dfs -mkdir $ {myOptions [0]}&#34;
sudo su hdfs -c&#34; hdfs dfs -chown $ {myOptions [1]} $ {myOptions [0]}&#34;
sudo su hdfs -c&#34; hdfs dfs -chmod $ {myOptions [2]} $ {myOptions [0]}&#34;
sudo su hdfs -c&#34; hdfs dfsadmin -setSpaceQuota $ {myOptions [3]} $ {myOptions [0]}&#34;
完成&LT; MYFILE.TXT
myFile.txt / usr / t1 hive:hive 776 1T
/ usr / t2 hdfs:hdfs 775 100G
但它也给出了如下错误:
sh create_and_set_quota_alternative.sh
目录:/ usr / t1
所有权:hive:hive
权限:776
配额:1T
错误:未设置JAVA_HOME且无法找到。
错误:未设置JAVA_HOME且无法找到。
错误:未设置JAVA_HOME且无法找到。
错误:未设置JAVA_HOME且无法找到。
目录:/ usr / t2
所有权:hdfs:hdfs
权限:775
配额:100G
错误:未设置JAVA_HOME且无法找到。
错误:未设置JAVA_HOME且无法找到。
错误:未设置JAVA_HOME且无法找到。
错误:未设置JAVA_HOME且无法找到。
答案 2 :(得分:0)
只需将脚本作为
运行sudo -u hdfs sh create_and_set_quota_alternative.sh