Вместо добавления cd ~/app && python serve.py в /etc/rc.local, попробуйте ввести весь путь. Вы ожидаете, что процесс init узнает, что ~ ваш домашний каталог каким-то образом, но init запускается как root. Поскольку init запускается с правами root, он ищет в каталоге / app, а не в вашем домашнем каталоге. Избавьтесь от ~, используя путь к вашему домашнему каталогу.
Попробуйте добавить /home/whitecolor/app/serve.py в /etc/rc.local . (pwd чтобы найти каталог пути.) Избавьтесь от python перед вашим скриптом serve.py, добавив #!/usr/bin/python вверху вашего скрипта. (введите, which python чтобы найти путь, если он не установлен в обычном месте)
Редактировать: Вы сказали "беги в фоновом режиме", и я пропустил это. Чтобы запустить команду в фоновом режиме, добавьте & после команды. Таким образом, чтобы создать фон для этой команды выше: /home/whitecolor/app/serve.py & Init, как правило, не требуется фоновый символ для запуска задания и его запуска в фоновом режиме.
Отличное предложение DrDR не требует такой же обработки & после команды при запуске cron, как те, которые запускаются в фоновом режиме по умолчанию.