首页 > 解决方案 > 在 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

有任何想法吗?

标签: ansible

解决方案


我回答了我自己的问题,因为我找到了有效的解决方案。

  - name: run the scheduled commands during reboot or deploy
    become: yes
    shell: docker exec -it --user root project_1 service cron start

所以我只是添加了拥有 cron 的用户,在这种情况下它root


推荐阅读