def _command_change(self):
        """
        Returns True if the difference between the current and
        pending configs represents a change to the command.
        That comes down to these cases:
            -  No current config (startup case)
            -  No pending config (task deleted)
            -  Command changed (restart needed)
            -  Environment changed (restart needed)
    """
        log = self._params.get('log', self._discard)
        if self._config_running is None:
            log.debug("Task '%s' change - no previous config", self._name)
            return True
        for elem in set(list(self._config_running) + list(self._config_pending)):
            #  Ignore these elements as they don't affect the operation of a process
            #  that is already running
            #
            if elem in ['control', 'pidfile', 'onexit', 'requires', 'start_delay']:
                continue
            if self._config_running.get(elem) != self._config_pending.get(elem):
                log.debug("Task '%s' change - '%s' text change", self._name, elem)
                return True
        new_context = self._context_build(pending=True)
        if self._context != new_context:
            if log.isEnabledFor(logging.DEBUG):
                log.debug("Task '%s' change - context change", self._name)
                for tag in set(list(self._context) + list(new_context)):
                    o = self._context.get(tag)
                    n = new_context.get(tag)
                    if o != n:
                        log.debug("    %s: %s -> %s", tag, o, n)
            return True
        log.debug("No changes in task '%s'", self._name)
        return False