crontab sudo docker 权限被拒绝

crontab sudo docker permission denied

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

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

权限被拒绝

在尝试连接到 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:

中 运行ning 的内容
* * * * * /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 官方文档 here , and this helpful article

使用没有 shell 和其他组 docker 和 wheel 的技术用户。

sudo useradd -M -G docker,wheel docker_user_5

从 cli 测试 docker_user_5 到 运行 docker 之后。

添加 crontab 任务到 docker_user_5