crontab sudo docker权限被拒绝



我有一个运行良好的bash脚本,我正在尝试使用crontab运行它。

主要问题是,当我运行脚本时,它会要求我输入sudo密码,以便执行docker命令。因此,当我尝试使用crontab执行脚本时,我会得到以下错误:

权限被拒绝

在尝试连接到Docker守护进程时获得拒绝的权限

这是我的bash脚本:

PG_USERNAME=username
PG_DB=example-db
echo "Removing 7 days inactive users..."
sudo docker exec -it example-app psql -U $PG_USERNAME $PG_DB 
-c "DELETE from users where created_at <= current_date at time zone 'UTC' - interval '7 days' and is_activated = false;" 
&& echo "Users removed!" 
|| echo "failed to run command"

这就是我在crontab-e:中运行的内容

* * * * * /home/user/Desktop/Projects/example/remove-inactive-users.sh >> /home/user/Desktop/Projects/example/log.log 2>&1

我尝试更改文件权限,但没有成功:

sudo chown root:root /home/user/Desktop/Projects/example/remove-inactive-users.sh
sudo chmod u+x /home/user/Desktop/Projects/example/remove-inactive-users.sh

我假设您在用户$USER下运行

您应该确保/etc/sudoers允许cron用户在没有密码的情况下运行脚本(NOPASSWORD选项(,类似于:

$USER ALL=NOPASSWD:/home/user/Desktop/Projects/example/remove-inactive-users.sh

或者,您也可以授予该用户名直接调用docker的权限(不使用sudo(:sudo usermod -aG docker $USER && exec sg docker newgrp $(id -gn) && sudo systemctl restart docker

我找到了解决方案。

我更改了bash脚本文件权限:

sudo chmod 715 remove-inactive-users.sh

然后我得到了错误:输入设备不是TTY

我解决了将脚本中的docker exec行更改为以下行的问题:

docker exec example-app psql...

@Julien的建议在sudo领域是正确的。

更基本的方法是创建一个专门的技术用户来运行cron作业。

专用用户的方法为日志记录和过程功能隔离提供了额外的好处。

请参阅这里的Docker官方文档,以及这篇有用的文章。

使用一个没有外壳的技术用户和附加组docker和wheel。

sudo useradd -M -G docker,wheel docker_user_5

在测试docker_user_5以从cli运行docker之后。

将crontab任务添加到docker_user_5

最新更新