一、需求场景
开发了一个springboot项目(就是一个项目而已),领导要求产品形式去买,也就是打成bin文件(可以百度,很多的),所以也写了很多自动安装脚本,同时也将开机启动shell命令加入到了rc.local当中。
这里遇到了两个问题:
1、用户普通账户登录,非root,因此往rc.local自动写入时,有权限问题;
2、解决完权限问题,自动全装,测试没问题,但是用户去测试时候,打电话说我们产品有问题,他是懂技术的,结果我们排查一看,他们重复安装好多次(我不清楚他们哪里来的功夫),rc.local中加入了很多很多重复的启动命令,而且rc.local也有用户自己加的其他
二、如何解决
1、解决权限问题
su - username -c "这里填写你的shell命令" ---比如我的shell命令是:service myWebPorjectService restart
这里大家最好用restart,完全安全放心,特别适合到底锁门没有强迫症的人
2、加入rc.local中
1)获取当前用户
currentUser=`whoami` 注意:这里符号不是逗号,是键盘右上角Esc下面的~这个东西
2)判断rc.local当中是否有你想加入的命令,防止重复加入
isExit=$(grep -q "su - $currentUser -c 'service myWebPorjectService restart'" /etc/rc.local && echo "yes" || echo "no")
3)代码
if [ "$isExit" = "yes" ]
then
echo "myWebPorjectService command is already in rc.local--this is just a remind message"
else
echo "myWebPorjectService command is not in rc.local,now add it--this is just a remind message"
#将start脚本加入开机启动 这块有强烈的权限问题 sudo sh -c解决这个问题
sudo sh -c 'echo "su - '$currentUser' -c '"'service myWebPorjectServicerestart restart'"'" >> /etc/rc.local'
fi