ansible - 在 Ansible 中启用并重新启动 crontab
问题描述
我有一个 laravel cron,我想在每次部署或重新启动容器时运行/重新启动,但我不能让服务在 Ansible 2.9 中运行。在容器内手动运行它可以正常工作。
- name: run the scheduled commands a specific file
shell: docker exec -it project_1 service cron restart
但是ansible抱怨错误
cron start", "delta": "0:00:00.086710", "end": "2020-11-20
14:32:47.259508", "msg": "non-zero return code", "rc": 1, "start":
"2020-11-20 14:32:47.172798", "stderr": "Got permission denied
while trying to connect to the Docker daemon socket at
unix:///var/run/docker.sock: Get
http://%2Fvar%2Frun%2Fdocker.sock/v1.39/containers/project_1/json:
dial unix /var/run/docker.sock: connect: permission denied",
"stderr_lines": ["Got permission denied while trying to connect to
the Docker daemon socket at unix:///var/run/docker.sock:
dial unix /var/run/docker.sock: connect: permission denied"],
"stdout": "", "stdout_lines": []}
我的 crontab 看起来像这样
* * * * * root . /root/.profile; /usr/local/bin/php /opt/app/public/../artisan schedule:run >> /dev/null 2>&1
我知道这是一个权限问题,我不知道怎么做,因为/var/run/docker.sock
只有在调用 cron 命令后才创建。我还尝试通过添加在 Dockerfile 中设置权限
RUN sudo chmod 666 /var/run/socket.sock
但这给了我错误,因为该文件尚不存在
如果我在容器内手动运行,它实际上可以工作
service cron restart
有任何想法吗?
解决方案
我回答了我自己的问题,因为我找到了有效的解决方案。
- name: run the scheduled commands during reboot or deploy
become: yes
shell: docker exec -it --user root project_1 service cron start
所以我只是添加了拥有 cron 的用户,在这种情况下它root
推荐阅读
- reactjs - Xcode10:找不到构建输入文件双重转换
- javascript - 无法读取属性,试图让应用程序要求用户输入年龄和姓名
- video - 如何在 Flutter 中播放视频列表?
- sql - 如何从 SQL 或 NoSQL 查询用户触发的一系列活动的关系?
- php - 使用 PHP 运行 post 操作而不是从表单提交
- sql-server - 从 TFS 运行 SQL 代理作业
- web - 桌面应用程序开发所需的技能
- gis - 使用 Openlayers 3 单击鼠标并弹出 Overlay.is 不起作用
- jupyter-notebook - 从 papermill 生成的 notebook 可以用实时运行的内核输出吗?
- google-chrome - 从 Chrome 网上应用店下载 CRX 文件时出错:CRX_HEADER_INVALID