Вопрос или проблема
Я использую следующее ..
fping -c1 computer
Когда я запускаю это вручную из терминала, я получаю 0% потерь пакетов. Я получаю 0% потерь пакетов, когда запускаю это из скрипта, ~/scripts/torrent.done.script
.
Но я получаю 100% потерь пакетов, когда срабатывает transmission-daemon и запускает скрипт.
computer : xmt/rcv/%loss = 1/0/100%
Я в недоумении, пытаясь выяснить это. Я пытался явно указать IP-адрес, я пытался использовать только IPv4, но результаты те же. Я пробовал с публичным IP-адресом, результаты те же. Я пробовал с VPN и без него, результаты те же.
ping
работает, fping
не работает. Это так странно для меня.
Ответ или решение
Причины проблемы с fping, вызываемого transmission-daemon
Ситуация, которую вы описали, интересна и может быть вызвана рядом факторов, связанных с окружением и контекстом выполнения скрипта. Давайте подробно разберем возможные причины, почему команда fping
работает в терминале и в скрипте, но не при вызове daemon’ом.
1. Разные окружения
Когда вы запускаете скрипт вручную из терминала, он выполняется в вашем пользовательском окружении. Однако, когда transmission-daemon
вызывает скрипт, он работает в другом контексте с возможными ограничениями на доступ к сетевым ресурсам. Убедитесь, что:
- Пользователь, от имени которого работает
transmission-daemon
, имеет необходимые права доступа и возможность выполнять сетевые команды. Возможно, стоит протестировать его черезsudo -u transmission-daemon -i
(или соответствующий пользовательский контекст).
2. Сетевые ограничения
Daemon может работать в среде с ограничением доступа в сеть:
- Firewall: Проверьте настройки фаервола (iptables, ufw и т.д.), так как они могут блокировать ICMP-пакеты, отправляемые
fping
. - SELinux/AppArmor: Если у вас включена система безопасности, она может ограничить выполнение некоторых команд и сетевых запросов. Убедитесь, что правила безопасности разрешают работу
fping
.
3. Проблемы с маршрутизацией
Иногда при работе в разных режимах окружение может использовать различные сетевые маршруты:
- Проверьте, как
transmission-daemon
обрабатывает сетевые соединения. Возможен ли конфликт маршрутизации, когда пакеты уходят в неожиданные направления.
4. Отладка и журналирование
Поскольку fping
не дает результата в одном случае, добавьте вывод логов для отладки:
- Модифицируйте ваш скрипт, чтобы добавлять логи действий. Например, добавьте команды
echo
перед выполнениемfping
и перенаправьте вывод в файл. Это поможет отследить, с какими параметрами и от чьего имени исполняется команда.
echo "Выполняем fping для компьютера" >> /tmp/fping_log.txt
fping -c1 computer >> /tmp/fping_log.txt 2>&1
5. Используйте альтернативные команды
Если fping
не работает так, как ожидается, вы можете попробовать другие инструменты для диагностики:
- Проверить с помощью
ping
(вы уже упомянули, что он работает) и других аналогичных инструментов, таких какmtr
для более глубокой диагностики сети.
Заключение
Резюме: причина проблемы заключается в различиях контекста выполнения скрипта при его запуске от имени пользователя и daemon’а. Проверьте окружение, права доступа, настройки безопасности и сетевые правила, проводя при этом отладку с помощью логов. Если ни одна из этих рекомендаций не поможет, вам могут помочь журналы системных ошибок, которые могут указать на дополнительные проблемы в работе сети.