Application orchestration

Snap robotics applications can be called from the terminal but also run in the background as daemons. Snap and snapcraft offer orchestration features that can become handy for robotics applications.

Command-chain

Valid for CLI: Yes

Valid for daemon: Yes

The command-chain keyword allows us to list commands to be executed before our main command. The ros1-noetic extension is actually using this mechanism. Thanks to it, we don’t have to worry about sourcing the ROS environment in the snap.

The main difference between command-chain and simply adding commands to the script launcher is that snapd is aware of it. Hence, if we are trying to debug something (with snap run --shell myapp) the command chain is still going to be called.

Note that an exec $@ is necessary at the end of our command-chain scripts since our actual command is given as an argument of the command-chain.

This means that with the following snapcraft example:

apps:
  my_app:
    command-chain: [command_chain_script1, command_chain_script2]
    command: main_command

The generated call will be:

./command_chain_script1 command_chain_script2 main_command

Potential use cases of command-chain are:

  • Set up a shell environment (like setting up a ROS environment)
  • Wait for another service to be started

Stop-command

Valid for CLI: No

Valid for daemon: Yes

stop-command allows one to specify a script, or a command, to be called right before the stop signal is sent to a program. This is only available for daemons since this is triggered by the snap stop command.

Potential use cases of stop-command are:

  • Make sure everything is synchronized
  • Wait for a job to finish
  • Save before exiting

Post-stop-command

Valid for CLI: No

Valid for daemon: Yes

Similarly to the stop-command entry, the post-stop-command is also calling a command, but this time, only after the service is stopped. This means that in the sequence we are calling stop-command, then stopping the command with a signal and once it’s done we call the post-stop-command. Also, only available for daemons.

Potential use cases of post-stop-command are:

  • Clean-up after program exited (temporary files etc)
  • Notify a system that the command has stopped
  • Move generated files

The snapcraft documentation for daemons describes many more features that could be useful in other projects.