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
我有一个运行良好的 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