TL;DR
* Стартуйте воркеры через supervisor
* Для очередей используйте сервер очередей, например rabbitmq
* Используйте PSR-3 совместимый логгер
1. Запускалка воркеров по крону... посмотрите supervisor, не создавайте костыльных велосипедов.
2. Лок таблицы - жирно, очень жирно)) Лок записи - еще куда ни шло. Вы даже малую нагрузку так выдержать не сможете.
3. Воркер - такая штука, что спокойнейшим образом может отвалиться, по этому лучше ее рестратовать сразу, см. supervisor
4. В случае проблемных тасок рискуете потерять не отработавшие.
5. Вы не проверяете аргументы методов - вот это печально, что будет, если вызвать
$task->start("'; DROP TABLE " . PREFIX . '_tasks');
6. Для логгирования очень рекомендую использовать что-то на базе PSR-3, Monolog например, не плодите костылей.
7. В воркере вы локаете таску, в таскере разлокиваете, зачем таскеру это делать? Если уж так, то лок И анлок - задача воркера.
8. Вы когда выгребаете новые таски, смотрите на lock=0, при завершении ставите lock=0, похоже на хрень. Получается одна и та же таска постоянно будет выполняться.