10
votes

I'm trying to run a one-off task with Marathon. I'm able to get the task container running, but after the task command completes, marathon runs another task, and so on. How can I prevent Marathon from running more than one task/command?

Or, if this is not possible with Marathon, how can I achieve the desired behaviour?

4

4 Answers

9
votes

As a hack you can kill a marathon task at the end, as suggested here: https://github.com/mesosphere/marathon/issues/344#issuecomment-86697361

As rukletsov already mentioned - Marathon is desigend for long-running tasks: https://stackoverflow.com/a/26647789/1047843

If Chronos doesn't fit in your situation you can use Jenkins with Mesos plugin: https://github.com/jenkinsci/mesos-plugin

Or you can try to talk with Mesos directly and write you own framework: http://mesos.apache.org/documentation/latest/app-framework-development-guide/

In my opinion the two easiest options would be Chronos and Jenkins.

6
votes

Marathon is designed for long running services, which means it will restart the task once it enters a terminal state. Depending on the nature of your task, you may want to take a look at other Mesos frameworks, e.g. Chronos. If you want to start a single task, you can use mesos-execute tool which accompanies Mesos.

5
votes

Since the question was answered a new framework called Eremetic has been developed for marathon that allows you to run one off tasks.

https://github.com/klarna/eremetic

0
votes

@Sander Smits: How @rukletsov wrote you can use the repeating intervals ISO8601 to execute services only one time. After the execution the job will be automatically disabled by chronos. Use"R0/.." (0 repetition) for schedule setting.