LINUX.ORG.RU

Почему ping в скрипте под обычным юзером и под root может работать по-разному?

 , ,


1

2

Господа,

что то я зачастил.

Но спасибо Вам большое за помощь.

Дело в том, что после некой аварии я пытаюсь сам, своими силами, наладить правильный бэкап.

У меня Ubuntu 16.04, на которой поднят KVM, и в одной из виртуалок крутится GitLab.

И у меня возникает такая задача: раз в день, если виртуалочка с GitLab выключена - надо её диск скопировать, а потом саму виртуалочку запустить командой virsh start.

Я сделал всё прямо, как железная дорога:

вот содержимое sh - файла, который я хочу запускать по крону:

if /bin/ping -c 1 192.168.10.57 &> /dev/null

then

echo Cant backup - VM working now

else

echo Try copy...

/bin/cp /VM/GitLab0_Ubuntu.img /backups/

/usr/bin/virsh start GitLab0_Ubuntu

fi

Но вот что интересно.

Я выключил виртуальную машину и стал пробовать скрипт в ручнмо режиме.

Когда я запускаю этот *.sh - файл под обычным пользователем - я получаю по морде отсутствием пермишшенов на /backups/

А когда я пишу

sudo ./backup-gitlab.sh

- я получаю еще более загадочный вывод:

Cant backup - VM working now

PING 192.168.10.57 (192.168.10.57) 56(84) bytes of data.

konst@LB1:/backups$ From 192.168.10.201 icmp_seq=1 Destination Host Unreachable

--- 192.168.10.57 ping statistics ---

1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

То есть, впечатление такое, что скрипт начинает выполнять ветку, соответствующую тому, что ping до нужного хоста есть.

Хотя хост выключен.

Вот скриншот:

http://junecat.ru/Storage/oth/ping-1.jpg

Не знаете ли Вы, почему это может так работать? Ведь ничего не изменилось, кроме того, что второй раз я запускаюсь из под sudo.

И еще раз спасибо всем, кто мне даёт советы. Это - бесценно

А более другого способа проверить запущенность виртуалки нет что ли?

Radjah ★★★★★
()

Когда я запускаю этот *.sh - файл под обычным пользователем - я получаю по морде отсутствием пермишшенов на /backups/

Логично.

Про пинг. Я встречал 2 версии пинга: одна возвращала адекватный код завершения, а другая - нет.

Если на виртуалке есть сервис какой-нибудь, то проще его проверять.

А еще проще проверять статус виртуальной машины «virsh list --all»

vel ★★★★★
()
25 июня 2018 г.

&> - это башизм. В скрипте надо прописать #!/bin/bash первой строчкой или запускать с указанием интерпретатора - sudo bash ./script.sh

deadNightTiger ★★★★★
()
25 августа 2018 г.
Ответ на: комментарий от dexpl

правильнее не дергать вирш. внешними скриптами, а взять какое нибудь api. Хоть на перле sys::virt, хоть на питоне.

anonymous
()
Ответ на: комментарий от vel

Если на виртуалке есть сервис какой-нибудь, то проще его проверять.
А еще проще проверять

Неужели не чувствуете, что тут надо говорить не о «проще», а о «правильнее»? Это же чудовищно, проверять сервис, который может ещё не подняться или уже опуститься перед остановкой системы. Такая проверка допускается для поднятия запасного чего-то, а не бекапа наверняка в режиме мощной преварительной/завершаещей записи образа vm.

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.