Carrot implements two manage.py commands in your django app - carrot
and carrot_daemon
The carrot
command is the base service which starts consuming messages from your defined RabbitMQ brokers, and
publishing any active scheduled tasks at the required intervals
carrot_daemon
is a daemon which can be used the invoke the carrot
service as a detached process, and allows
users to stop/restart the service safely, and to check the status. carrot_daemon
can be invoked as follows:
python manage.py carrot_daemon start
python manage.py carrot_daemon stop
python manage.py carrot_daemon restart
python manage.py carrot_daemon status
The following additional arguments are also available:
–logfile: | path to the log file. Defaults to /var/log/carrot.log |
---|---|
–pidfile: | path to the pid file. Defaults to /var/run/carrot.pid |
–no-scheduler: | run the carrot service without the scheduler (only consumes tasks) |
–testmode: | Used for running the carrot tests. Not applicable for most users |
–loglevel: | The level of logging to use. Defaults to DEBUG and shouldn’t be changed under most circumstances |
On some systems you may encounter OS errors while trying to run the service with the default log/pid file locations. This can be fixed by specifying your own values for these paths:
python manage.py carrot_daemon start --logfile carrot.log --pidfile carrot.pid
Warning
If you use a custom pid, you must also provide this same argument when attempting to stop, restart or check the status of the carrot service
Use the following to disabled ScheduledTasks
python manage.py carrot_daemon --no-scheduler
Using the carrot_daemon
will run in detached mode with no sys.out
visible. If you are having issues getting the
service working properly, or want to check your broker configuration, you can use the carrot
command instead, as
follows:
python manage.py carrot
You will be able to read the system output using this command, which should help you to resolve any issues
Note
The carrot
command does not accept the pidfile
or mode
(e.g. start, stop, restart, status) arguments. No
pid file gets created in this mode, and the process is the equivalent of carrot_daemon start
. To stop the
process, simply use CTRL+C
carrot.management.commands.carrot_daemon.
Command
(stdout=None, stderr=None, no_color=False)¶The daemon process for controlling the carrot.management.commands.carrot
service
add_arguments
(parser)¶This Command inherits the same arguments as carrot.management.commands.carrot.Command
, with the
addition of one positional argument: mode
Parameters: | mode (str) – Must be “start”, “stop”, “restart” or “status” |
---|
delete_pid
()¶Deletes the pid file, if it exists
handle
(*args, **options)¶The main handler. Initiates CarrotService
, then handles it based on the options supplied
Parameters: | options – handled by argparse |
---|
pid
¶Opens and reads the file stored at self.pidfile, and returns the content as an integer. If the pidfile doesn’t exist, then None is returned.
Return type: | int |
---|
start
(**options)¶Starts the carrot service as a subprocess and records the pid
stop
(hard_stop=False)¶Attempts to stop the process. Performs the following actions:
MissingPid
exceptionOSError
is raised.If hard_stop is used, the process will not wait for the consumers to finish running their current tasks
Parameters: | hard_stop (bool) – if True, sends a sigkill instead of a sigterm to the consumers |
---|
write_pid
(pid)¶Writes the pid to the pidfile
carrot.management.commands.carrot_daemon.
MissingPid
¶carrot.management.commands.carrot_daemon.
PidExists
¶carrot.management.commands.carrot.
Command
(stdout=None, stderr=None, nocolor=False)¶The main process for creating and running carrot.consumer.ConsumerSet
objects and starting thes scheduler
add_arguments
(parser)¶Entry point for subclassed commands to add custom arguments.
handle
(**options)¶The actual handler process. Performs the following actions:
carrot.objects.ScheduledTaskManager
, which schedules all activecarrot.objects.ScheduledTask
instances to run at the given intervals. This only happens if the
–no-scheduler argument has not been provided - otherwise, the service only creates consumer objects
new carrot.objects.ConsumerSet
for them. Each ConsumerSet will contain n
carrot.objects.Consumer
objects, where n is the concurrency setting for the given queue (as
defined in the Django settings)
to the carrot.objects.ScheduledTask
queryset are detected, carrot updates the scheduler
accordingly
On receiving a KeyboardInterrupt, SystemExit or SIGTERM, the service first turns off each of the schedulers in turn (so no new tasks can be published to RabbitMQ), before turning off the Consumers in turn. The more Consumers/ScheduledTask objects you have, the longer this will take.
Parameters: | options – provided by argparse (see above for the full list of available options) |
---|