如何在shell中传递sudo密码
  Il1dbC9Jhbvl 2023年12月09日 45 0

简介

在Linux中普通用户执行某些系统命令时需要root权限,这时需要我们输入密码才能执行。当使用crond定时任务来执行shell脚本时,由于不会出现交互界面,执行到sudo需要输入密码时往往会执行出错,导致脚本无法正确运行。

解决方法

我们可以使用echo将密码作为输入传递给sudo -S命令,就可以很好的解决这个问题

简单示例:

#!/bin/bash
time=$(date +"%F %Y%m%d%H%M%S")
if systemctl status httpd >/dev/null 2>&1 ;then
        echo "${time}http已启动" >>success.txt
else
        echo "${time}http未启动" >>failed.txt
        sudo  systemctl start httpd
fi

上述脚本在创建的定时任务中执行时就会报错,导致最后一条命令无法执行。

报错提示告诉我们使用sudo -S 参数从标准输入中读取密码

如何在shell中传递sudo密码_shell脚本

我们换个写法再次尝试

#!/bin/bash
time=$(date +"%F %Y%m%d%H%M%S")
passwd="123"
if systemctl status httpd >/dev/null 2>&1 ;then
        echo "${time}http已启动" >>success.txt
else
        echo "${time}http未启动" >>failed.txt
        echo "${passwd}"|sudo -S  systemctl start httpd
        echo "${time} http启动成功" >>httpd.txt
fi

查看运行效果,查看定时任务日志与httpd.txt文件

可以看到定时任务日志没有报错!脚本执行成功

如何在shell中传递sudo密码_普通用户_02


如何在shell中传递sudo密码_普通用户_03

ps:当我们使用普通用户设置定时任务执行shell脚本时,如果也出现了上述错误,不妨可以试试~

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月09日 0

暂无评论

推荐阅读
Il1dbC9Jhbvl