Какие есть способы запуска процессов при запуске в Linux?

Коды ошибок ядра Linux определены в errno.h . Возвращаемое значение отрицательное, но сам код положительный, и вы найдете

#define ETIMEDOUT   110 /* Connection timed out */

Таким образом, iPhone отображается как USB-устройство Ethernet, а затем ядро ​​пытается установить (виртуальный )носитель для этого устройства, отправляя управляющее сообщение USB, но это сообщение не принимается iPhone, и время вышло.

Этому может быть несколько причин. Если бы это работало вчера, я бы исключил проблемы с драйверами, поэтому я предполагаю, что проблемы с оборудованием или кабелем -начальные пакеты USB передаются нормально, но затем они перестают работать.

0
29.11.2020, 16:42
1 ответ

Позвольте мне сначала ответить на конкретные вопросы, а затем я немного обобщу, чтобы намекнуть на решение вашей проблемы с wvdial.

in which order these methods run?

Cron запускается каждую минуту и ​​выполняет команды, которые должны быть выполнены в эту конкретную минуту. Cron не имеет отношения к загрузке, за исключением того, что он, очевидно, ничего не запускает, когда машина выключена.

/etc/rc.local запускается последним. С System V init (pre -sysemd )это действительно последнее, что нужно запустить, прежде чем система будет считаться загруженной. В случае с systemd он запускается сразу после запуска сети, но одновременно с другими службами .

юниты systemd запускаются как можно раньше, параллельно с их зависимостями (см. директивы Wantsи Requiresв systemd.unit (5))и ограничены Beforeи Afterдирективы. systemd проводит различие между упорядочением модулей и их зависимостями .

when should I use which method?

Используйте Cron, если вам нужно что-то выполнять периодически. С системд,вы также можете использовать для этого таймеры .

rc.local редко является правильным ответом, и его следует избегать. Попробуйте отредактировать конфигурацию соответствующей службы, изменить скрипт для этой службы или написать новый. См. этот пост в блоге для подробного объяснения этого.

единицы systemd — это то, что вы должны использовать большую часть времени (, но см. ниже ). Вместо этого в System V используйте службы.

are there other methods?

Вы перечислили основные, но есть и специализированные объекты для некоторых других задач. Например, udev может запускать скрипты при определенных событиях. Среды рабочего стола, такие как KDE или Gnome, предоставляют возможности автоматического -запуска. Как правило, делайте работу там, где это наиболее целесообразно; например. используйте автозапуск KDE для запуска вашего аудиоплеера, но используйте systemd для запуска сервера OpenSSH.

In this particular case I need to start a script, which executes wvdial and keeps dialup connection up.

Это интересный случай, :вам нужно инициализировать устройство , а затем запустить службу . Наименее хакерский подход, который я могу придумать, это:

  1. пометьте ваше устройство тегом "systemd", чтобы systemd создал для него модуль устройства ;
  2. записать единицу -одного кадра, которая зависит от единицы устройства. Он должен запустить usb_modeswitchи создать символические ссылки — то же самое, что делает ваш существующий обработчик udev;
  3. systemctl edit wvdial.service, чтобы добавить директивы Requires=и After=, чтобы wvdial зависел от созданного вами модуля -выстрела. Это задержит wvdial до тех пор, пока не будет выполнена настройка режима.

Чуть более хакерский способ сделать это — сохранить обработчик udev и изменить службу wvdial на busy -ждать появления символических ссылок.

Возможно, вам также потребуется научить NetworkManager работе с wvdial, чтобы NM знал, что -необходимо повторно набрать номер, если устройство было отключено, а затем снова подключено — но я не уверен, так как никогда не использовал модемы.

3
18.03.2021, 22:46

Теги

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