Запускать приложение без графического интерфейса после подключения к сети

-f опция подавляет подсказки подтверждения при удалении файла только для чтения. Это также подавляет ошибки, когда один или несколько предоставил файл, не существует.

-f опция полезна, когда Вы знаете, что некоторые файлы, которые Вы удаляете, могут быть только для чтения, и Вы не хотите быть предложенными об этом.

f опция также полезна, когда Вы хотите удалить некоторые файлы в случае, если они существуют и не хотят заботиться, существуют ли они или нет. Это является очень наиболее часто используемым в make-файлах, для создания команды, которая удаляет файлы, которые могут быть повторно созданы от исходных файлов. Например, если foo.o может быть восстановлен от foo.c, bar.o может быть восстановлен от bar.c, и myapp может быть восстановлен от foo.o и bar.o, затем цель make-файла

clean:
        rm -f *.o myapp

удаляет myapp, foo.o и bar.o если они существуют, и не жалуется, не существует ли какой-либо из них.

Включая -f в инструкциях удалить дерево каталогов не необходимо в большинстве случаев. Это может быть выровнено по ширине, потому что, если Вы уверены, что хотите удалить то дерево каталогов независимо от того, что находится в нем, затем можно указать -f постараться не запрашиваться в случае, если некоторые файлы только для чтения. Однако люди, которые говорят для выполнения rm -rf часто просто повторяют мистическое колдовство для избавлений от чего-то, независимо от ли опции -r и -f на самом деле необходимы. Если опции не необходимы, они не желательны, потому что они увеличивают риск, что опечатка в аргументе уничтожит что-то важное.

4
21.06.2015, 23:00
3 ответа

Было бы неплохо использовать rungetty для запуска на неиспользуемом виртуальном терминале. control alt f n для просмотра вывода.

0
27.01.2020, 20:57

Вы можете поместить что-то вроде этого в свой /etc/rc.local файл (непроверенный):

{ while ! ping -c 1 -W 1 8.8.8.8; do  sleep 1; done; /home/youruser/Desktop/rpiMainProgram > /home/youruser/Desktop/rpiMainProgram.log 2>&1; }&

ping -c 1 -W 1 8.8.8.8 : отправляет один пакет ping и ожидает возврата в течение 1 секунды.

Цикл while продолжается до тех пор, пока команда ping завершается с кодом состояния> 0, то есть до тех пор, пока не удается выполнить команду.

Когда у вас есть сетевое соединение и вы можете успешно пинговать 8.8.8.8 , цикл остановится и выполнит вашу программу (проверьте, имеет ли значение такой вызов, например, с помощью pwd ).

С помощью {} мы превращаем его в особую команду, так что мы можем отодвинуть все это на задний план, используя & . В противном случае он заблокирует остальную часть /etc/rc.local , пока у вас не будет сеть.

Могут быть более элегантные решения, но у меня есть что-то похожее на то, что есть на моем Pi.

2
27.01.2020, 20:57

Запустите вашу программу в мультиплексор терминала, такой как screen или tmux . Используйте его для создания отдельного терминала, в котором вы запускаете свою программу, и подключения к этому терминалу, когда вы хотите с ним взаимодействовать. Например, с экраном, запустите это во время запуска:

screen -S rpiMainProgram -d -m /home/nixda/Desktop/rpiMainProgram

и используйте это, чтобы присоединиться к экземпляру экрана, на котором работает программа:

screen -S rpiMainProgram -r -d

Чтобы отсоединиться от экземпляра экрана, нажмите Ctrl + A , затем d .

В Debian для запуска программы после включения сетевого интерфейса добавьте сценарий в /etc/network/if-up.d . Вам нужно будет проверить, какой интерфейс запускается (на практике вы не хотите запускать программу при запуске интерфейса обратной связи). Создайте /etc/network/if-up.d/local_rpiMainProgram , содержащий что-то вроде

#!/bin/sh
case "$IFACE" in
  ppp0) screen -S rpiMainProgram -d -m /home/nixda/Desktop/rpiMainProgram
esac

или

#!/bin/sh
if ping -q -W1 -c1 8.8.8.8; then
  screen -S rpiMainProgram -d -m /home/nixda/Desktop/rpiMainProgram
fi
1
27.01.2020, 20:57

Теги

Похожие вопросы