Shell手动调用时作为sudo运行,而不是从cron调用时(sudoers)

时间:2015-03-11 14:40:38

标签: bash cron sudoers

首先,如果在其他地方已经回复了,请告诉我,我会删除这个问题。其他人似乎比我更善于搜索这个网站。

我有一个脚本已添加到我的sudoers文件中,当从命令行手动调用时,该脚本将以sudo身份运行(脚本始终从另一个程序中调用,所以我的意思是我调用父脚本)而不提示我的密码。子脚本更改权限以确保父级可以根据需要操作文件。但是,当从cron调用父代时,子脚本没有运行,或者至少没有正常运行(我让stdout写入日志以确保我看到的内容)。请参阅下面的脚本详细信息

来自cron:

bash * * * * * '/path/to/script/foo.sh' &> /dev/null

在父脚本中调用:

source /path/to/childScript/bar.sh $dirToManipulate >> $LOG

完整的子脚本:

if [ $# -eq 1 ]; then
    find "$1" -type d -exec chmod -vR 777 {} \;
    find "$1" -type f -exec chmod -vR 777 {} \;
else
    echo "No folders/files given"
fi

就像我上面所说,如果我从终端(bash /path/to/script/foo.sh)手动调用父脚本,那么子脚本会执行它应该执行的操作并修改指定目录中文件的权限,但是当父脚本是从cron(bash * * * * * '/path/to/script/foo.sh' &> /dev/null)调用,子脚本无法修改指定目录中文件的权限。

在SUDOERS文件中:

username ALL=(ALL) ALL
username ALL=(root) NOPASSWD: /path/to/childScript/bar.sh

1 个答案:

答案 0 :(得分:0)

由于缺少一个我能找到的更好的选项,我从使用我的用户cron切换到root cron。我不建议那些追随我的人。