Docker 容器里配置计划任务 crontab(DaoCloud + Docker + Laravel5)
一名野生全栈工程师,喜欢研究各种新技术。
Follow Now最近项目涉及到一个定时任务的功能,所以去这几天研究了一下 crontab 的使用方法,按照网上的相关教程顺利在自己的电脑上成功开启了这个功能
Laravel + crontab
添加 crontab 配置
1、执行命令
$ crontab -e
2、添加以下内容( path/to为应用路径 ),即每分钟去执行一次以下的命令
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
3、启动(以下命令为Ubuntu下的启动命令,其他系统可能不一样)
$ /etc/init.d/cron start
完成以上三步即可以成功开启 Laravel 的任务调度功能了,下面验证一下
验证任务调度是否正常执行
./App\Console\Kernel
... protected function schedule(Schedule $schedule) { $schedule->call(function () { // 以下代码会插入一条 Tweet 数据 DB::table('tweets')->insert(['content' => 'Hi']); })->everyMinute(); }...
过几分钟后就可以去查看一下数据库有没有成功插入数据~
参考文章
- Laravel 任务调度
- docker下计划任务crontab的使用方法[python]
- Laravel 定时任务
DaoCloud + Docker + Laravel + crontab
上面的尝试成功后就是将这些配置到 Dockerfile 里,让容器在启动的时间自动开启 crontab 任务调度,让这一切都自动去完成~
具体步骤
1、在项目创建以下 crontab 配置文件 ./_linux/var/spool/cron/crontabs/root
* * * * * /usr/local/bin/php /app/artisan schedule:run >> /dev/null 2>&1
2、在 Dockerfile 里将配置文件复制到 crontab 指定的配置所在目录
FROM php:7.0.7-apacheMAINTAINER JianyingLi <lijy91@foxmail.com># 安装 cron 命令... RUN apt-get update && apt-get install -y cron vim...# 配置 crontab# 复制配置文件 /var/spool/cron/crontabs/ADD _linux/var/spool/cron/crontabs/root /var/spool/cron/crontabs/root# 设置文件所有者和文件关联组为 root:crontab ,关联组必须为 crontabRUN chown -R root:crontab /var/spool/cron/crontabs/root \# 修改文件的权限,必须为 600,否则不认 && chmod 600 /var/spool/cron/crontabs/root# 创建 log 文件RUN touch /var/log/cron.log...# 在 entrypoint.sh 脚本里加入启动 apache 和 crontab 的相关命令RUN chmod 777 ./entrypoint.shENTRYPOINT ["./entrypoint.sh"]
3、添加 ./entrypoint.sh 脚本,并在里面启动 apache 和 crontab
php:7.0.7-apache这个基础镜像已经包含了一个 CMD ['apache2-foreground']指令用于启动 apache 服务,但是我们需要同时启动apache 和 crontab ,所以增加了这个脚本文件并在里面加入了相关的命令。
#!/bin/bashset -x# 将环境变量保存至 /etc/default/localerm -rf /etc/default/localeenv >> /etc/default/locale# 启动 crontab/etc/init.d/cron start# 启动 apacheapache2-foregroundexec "$@"
由于crontab的执行机制,所以无法直接使用通过DaoCloud后台配置的环境变量,但是我们应用的配置都是通过环境变量来配置的,所以需要通过 env 命令将这些环境变量保存到 /etc/default/locale里,crontab 在启动时会加载这个文件里的环境变量,否则在执行 php artisan schedule:run命令会无法获取相关的应用配置,导致无法执照我们预想的去运行(例如始终无法插入新数据到数据库)
完整相关文件
以下是三个主要是配置文件,我是用来构建运行 Laravel5 应用的,应该可以满足大部分的需求。
.├── _linux│ └── var│ └── spool│ └── cron│ └── crontabs│ └── root├── Dockerfile└── entrypoint.sh
./Dockerfile
FROM php:7.0.7-apacheMAINTAINER JianyingLi <lijy91@foxmail.com>RUN apt-get update \ && apt-get install -y \ libmcrypt-dev \ libz-dev \ git \ cron \ vim \ && docker-php-ext-install \ mcrypt \ mbstring \ pdo_mysql \ zip \ && apt-get clean \ && apt-get autoclean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composerADD _linux/var/spool/cron/crontabs/root /var/spool/cron/crontabs/rootRUN chown -R root:crontab /var/spool/cron/crontabs/root \ && chmod 600 /var/spool/cron/crontabs/rootRUN touch /var/log/cron.logRUN a2enmod rewriteWORKDIR /appCOPY ./composer.json /app/COPY ./composer.lock /app/RUN composer install --no-autoloader --no-scriptsCOPY . /appRUN rm -fr /var/www/html \ && ln -s /app/public /var/www/htmlRUN chown -R www-data:www-data /app \ && chmod -R 0777 /app/storage \ && composer installRUN chmod 777 ./entrypoint.shENTRYPOINT ["./entrypoint.sh"]
./_linux/var/spool/cron/crontabs/root
* * * * * /usr/local/bin/php /app/artisan schedule:run >> /dev/null 2>&1
./entrypoint.sh
#!/bin/bashset -xrm -rf /etc/default/localeenv >> /etc/default/locale/etc/init.d/cron startapache2-foregroundexec "$@"
示例(完成代码可以参考下面的项目)
- phoenix-backend

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Alipay Php ...

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Le détournement de la session peut être réalisé via les étapes suivantes: 1. Obtenez l'ID de session, 2. Utilisez l'ID de session, 3. Gardez la session active. Les méthodes pour empêcher le détournement de la session en PHP incluent: 1. Utilisez la fonction Session_RegeReate_id () pour régénérer l'ID de session, 2. Stocker les données de session via la base de données, 3. Assurez-vous que toutes les données de session sont transmises via HTTPS.

L'application du principe solide dans le développement de PHP comprend: 1. Principe de responsabilité unique (SRP): Chaque classe n'est responsable d'une seule fonction. 2. Principe ouvert et ferme (OCP): les changements sont réalisés par extension plutôt que par modification. 3. Principe de substitution de Lisch (LSP): les sous-classes peuvent remplacer les classes de base sans affecter la précision du programme. 4. Principe d'isolement d'interface (ISP): utilisez des interfaces à grain fin pour éviter les dépendances et les méthodes inutilisées. 5. Principe d'inversion de dépendance (DIP): les modules élevés et de bas niveau reposent sur l'abstraction et sont mis en œuvre par injection de dépendance.

Comment définir automatiquement les autorisations d'UnixSocket après le redémarrage du système. Chaque fois que le système redémarre, nous devons exécuter la commande suivante pour modifier les autorisations d'UnixSocket: sudo ...

Comment déboguer le mode CLI dans phpstorm? Lors du développement avec PHPStorm, nous devons parfois déboguer PHP en mode interface de ligne de commande (CLI) ...

Liaison statique (statique: :) implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Envoyant des données JSON à l'aide de la bibliothèque Curl de PHP dans le développement de PHP, il est souvent nécessaire d'interagir avec les API externes. L'une des façons courantes consiste à utiliser la bibliothèque Curl pour envoyer le post� ...
