在 cron 中运行包含 sudo 的脚本

在 cron 中运行包含 sudo 的脚本
#!/bin/bash
value=$(<man.txt)
echo "$value"

if [ "$value" == "true" ]; then
    echo "startedif_manthan"
      ps -ef|grep sym |awk '{ print $2 }'|sudo  xargs kill -9;
      sleep 30;
    sudo sh /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server;
fi

我需要在 cron 中运行上述脚本。它可以在 cron 中执行而无需密码吗?

有什么建议么?

答案1

您可以配置sudo为不需要密码:

  1. 使/var/www/symmetric-ds-3.1.6/bin/sym可执行文件:

    $ chmod a+x /var/www/symmetric-ds-3.1.6/bin/sym
    
  2. 在您的脚本中替换:

    sudo sh /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server
    

    和:

    sudo /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server
    
  3. 使用visudo将以下行添加到/etc/sudoers

    <user who runs the cronjob> ALL = NOPASSWD:/path/to/xargs [-0-9 a-z]*, /var/www/symmetric-ds-3.1.6/bin/sym [-0-9 a-z]*
    

答案2

我宁愿将脚本布局如下:

#!/bin/sh
read value < /path/to/man.txt

if [ "$value" = "true" ]; then
    pkill -u root '^sym$' && sleep 30
    sh /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server
fi

因为无论如何你都想以 root 身份运行每个命令,所以把它放在 root 的 crontab 中。如果你不需要以 root 身份运行任何东西,就不要。如果你确实需要通过为sudo某些应用程序专门配置的权限来运行它,请恢复sudo,但请注意,你还需要专门配置的权限来终止程序(除非它具有相当于开关的功能--kill)。

我删除了echos,因为 crontab 中不必要的打印语句只会使日志变得混乱。如有必要,您可以在脚本中实现日志记录机制。

相关内容