Коды ошибок ядра Linux определены в errno.h . Возвращаемое значение отрицательное, но сам код положительный, и вы найдете
#define ETIMEDOUT 110 /* Connection timed out */
Таким образом, iPhone отображается как USB-устройство Ethernet, а затем ядро пытается установить (виртуальный )носитель для этого устройства, отправляя управляющее сообщение USB, но это сообщение не принимается iPhone, и время вышло.
Этому может быть несколько причин. Если бы это работало вчера, я бы исключил проблемы с драйверами, поэтому я предполагаю, что проблемы с оборудованием или кабелем -начальные пакеты USB передаются нормально, но затем они перестают работать.
Позвольте мне сначала ответить на конкретные вопросы, а затем я немного обобщу, чтобы намекнуть на решение вашей проблемы с 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.
Это интересный случай, :вам нужно инициализировать устройство , а затем запустить службу . Наименее хакерский подход, который я могу придумать, это:
usb_modeswitch
и создать символические ссылки — то же самое, что делает ваш существующий обработчик udev; systemctl edit wvdial.service
, чтобы добавить директивы Requires=
и After=
, чтобы wvdial зависел от созданного вами модуля -выстрела. Это задержит wvdial до тех пор, пока не будет выполнена настройка режима. Чуть более хакерский способ сделать это — сохранить обработчик udev и изменить службу wvdial на busy -ждать появления символических ссылок.
Возможно, вам также потребуется научить NetworkManager работе с wvdial, чтобы NM знал, что -необходимо повторно набрать номер, если устройство было отключено, а затем снова подключено — но я не уверен, так как никогда не использовал модемы.