Архив Декабрь 2014

Phing, cron task

| Нет комментариев
Есть такая штука как Phing. Это как Ant только Phing.
Позволяет совершать тривиальные задачи по развертыванию проекта на сервере, как то: настройка прав доступа к директориям/файлам, копирование чего то куда то, миграции и т.д. Но вот с заданиями для cron там беда.
Существующие, легко нагугливаемые примеры предлагают писать задания в /etc/cron.d/, куда на обычном shared-хостинге мы естественно не имеем доступа. Ну или предлагают нам sudo, что тоже слегка не то.

Но есть task exec!
Итак:
$ touch build.xml
$ nano build.xml
Приведем наш build к следующему виду:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Phing build config -->
<project name="test" basedir="." default="deploy">
    <target name="set_crontab" description="Set Crontab">
        <exec
            command='/bin/echo -en "`crontab -l 2>/dev/null`\n0 * * * *  php `pwd`/protected/yiic update\n\n" | crontab - 2>/dev/null'
            passthru="true" checkreturn="true" />
    </target>
    
    <!-- Default target -->
    <target name="deploy" depends="set_crontab"></target>
</project>
Запустим phing и увидим нечто такое:
$ phing
Buildfile: /home/vagrant/build.xml

test > set_crontab:


test > deploy:


BUILD FINISHED

Total time: 0.0925 seconds
Выполнится буквально следующий код:
/bin/echo -en "`crontab -l 2>/dev/null`\n0 * * * *  php `pwd`/protected/yiic update\n\n" | crontab - 2>/dev/null
Сказав в той же консоли 'crontab -l' увидим нечто такое:
$ crontab -l

0 * * * *  php /home/vagrant/protected/yiic update
Congratulations!

Серфя сегодня интернетики, набрел на знатное чтиво в тему гендерного срача