synology.forum архив спільноти · 2005–2022
ai.synology.forum →
ГлавнаяУстановка, Загрузка и Настройка › Использование скриптов SH

Использование скриптов SH

diemon · 11.03.2016

Народ, столкнулся с проблемой написания и запуска скрипта в хранилке.

Мне необходимо удалять устаревшие файлы и папки из папки общего доступа.

Первое с чем столкнулся, так это с тем, что синтаксис команд у хранилки отличается от синтаксиса линукса.

В итоге методом перебора через telnet подобрал правильное написание команд - особенно это касается -mtime. В классическом случае параметры вводятся с "+" и "-". На Synology "+" не работает. Достаточно указывать без "+".

 

Вот написал такой скрипт и сохранил его в файл script.sh:

 

#Удаление устаревших фото и видео архива системы видеонаблюдения

find /volume1/NVR_Archive -type f -mtime 2 -exec rm -rf {} \;

find /volume1/NVR_Archive -type d -mtime 2 -exec rm -rd {} \;

 

Для тех, кто увлекается линуксом, сразу отвечаю на вопрос "Почему отдельными строками, я удаляю файлы, а потом папки, когда во второй строке он удаляет все". Отвечаю: в некоторых случаях вложенности файлов и папок только вторая строка, из моих наблюдений, иногда криво отрабатывает, поэтому решил сначала удалять файлы, а потом все папки. Это надежный вариант.

 

Когда подключаюсь по telnet и ввожу это командами - все работает.

 

Но из файла sh, который я включил в планировщик задач, по какой-то, не известной мне причине, не отрабатывает. При этом в качестве пользователя под которым производится запуск, указываю Admin.

 

В чем проблема с планировщиком?

alexejnic · 11.03.2016

Первое. Файл сделал исполняемым? Права на запуск есть?

Заголовок файла

#!/bin/sh

имеется?

Сперва запускай файл из терминала и проверь результат. Работает ли файл. И только потом его в crontab суй.

Да и сделай запуск от root

diemon · 11.03.2016
Первое. Файл сделал исполняемым? Права на запуск есть?

Заголовок файла

#!/bin/sh

имеется?

Сперва запускай файл из терминала и проверь результат. Работает ли файл. И только потом его в crontab суй.

Да и сделай запуск от root

 

 

Что значит исполняемым?

Права есть есть все. Что значит на запуск? Это какие-то отдельные права? Или достаточно тех, что группе administrators выданы все права (чтение, запись и т.п.) ?

#!/bin/sh

- имеется.

 

crontab - это стандартный планировщик или отдельный качать? Сейчас хочу установить сторонний autorun. Нужно?

 

От root - ок.

kms · 11.03.2016
Что значит исполняемым?

То и значит. Файл должен иметь права на выполнение.

Права устанавливаются через команду chmod - chmod +x file_name где file_name имя нужного файла, если нужно то и путь до него.

polanat · 11.03.2016
Права устанавливаются через команду chmod - chmod +x file_name где file_name имя нужного файла, если нужно то и путь до него.

В WinSCP это делается через интуитивно понятный графический интерфейс ...

kms · 11.03.2016

Ну или через WinSCP, в принципе без разницы.

SergeS · 11.03.2016
crontab - это стандартный планировщик или отдельный качать? Сейчас хочу установить сторонний autorun. Нужно?

 

Не нужно, стандартный вполне справляется. Единственное, с чем я столкнулся - в стандартном через DSM низзя задать интервалы меньше чем час. Если вам это так уж надо, то придется лезть в потроха и ручками редакторовать crontab, естественно - с риском его потерять при очередном апдейте, ну или была какая-то оболочка, позволяющая его редактировать прямо из DSM.

 

Ну и про права и про запуск от root вам уже сказали...

satoorn · 12.03.2016
Не нужно, стандартный вполне справляется. Единственное, с чем я столкнулся - в стандартном через DSM низзя задать интервалы меньше чем час. Если вам это так уж надо, то придется лезть в потроха и ручками редакторовать crontab, естественно - с риском его потерять при очередном апдейте, ну или была какая-то оболочка, позволяющая его редактировать прямо из DSM.

 

Ну и про права и про запуск от root вам уже сказали...

В стандартном можно сделать интервал, каждую минуту. )

$cat parsing

#!/bin/sh

 

if mount | grep 192.168.25.25 #если роутер смонтирован..

 

then /volume1/web/lightsquid/lightparser.pl access.log.$(date +%Y.%m.%d) #то парсим

 

else mount 192.168.25.25:/opt/var/log /opt/var/log/3proxy #иначе монтируем

/volume1/web/lightsquid/lightparser.pl access.log.$(date +%Y.%m.%d)#и парсим

fi

http://s001.radikal.ru/i193/1603/b9/ea93811bee69.jpg

http://s017.radikal.ru/i441/1603/ca/4e3ac8bd903d.jpg

diemon · 13.03.2016
То и значит. Файл должен иметь права на выполнение.

Права устанавливаются через команду chmod - chmod +x file_name где file_name имя нужного файла, если нужно то и путь до него.

 

 

Ну ок. Попробую. Спасибо.

diemon · 13.03.2016
В WinSCP это делается через интуитивно понятный графический интерфейс ...

 

 

Вот этого нигде не нашёл в интерфейсе. Только права на запись и чтение. Скиньте скрин пожалуйста

diemon · 13.03.2016

А ещё я нигде не увидел логов как отрабатывает планировщик. Вообще DSM скудна на логи..

Например, мне бы хотелось получать уведомления на почту о том, как отрабатывают скрипов в планировщике - этого нет, и, видимо, придётся в каждом скрипте вставлять модули по уведомлениям..

 

kms · 13.03.2016
Вот этого нигде не нашёл в интерфейсе. Только права на запись и чтение. Скиньте скрин пожалуйста

В свойствах файла(через правую кнопку) есть галочки R, W, и X вот Х как раз для прав на выполнение.

Устанавливаешь для нужного пользователя и все.

diemon · 13.03.2016
Вот этого нигде не нашёл в интерфейсе. Только права на запись и чтение. Скиньте скрин пожалуйста

 

 

Итого имеем следующее:

 

Текст скрипта в файле:

#!/bin/sh
find /volume1/NVR_Archive -type f -mtime 2 -exec rm -rf {} \; 
find /volume1/NVR_Archive -type d -mtime 2-exec rm -rd {} \;

[/code]

 

Разрешения на выполнение файла:

Короче как тут вкладывать фото, вообще не понятно... Сначала выкладывать фото, а потом вводить ссылку на него - это вообще извращенство.. Администраторам форума "привет"...

 

Короче права на "перебор папок/выполнение" есть.

 

Через телнет - команды скрипта работают. А через планировки все также не работает...

polanat · 13.03.2016
Короче как тут вкладывать фото, вообще не понятно... Сначала выкладывать фото, а потом вводить ссылку на него - это вообще извращенство..

Тут выкладывается линк, а не фото. Бесплатных хостингов фотографий - вагон и маленькая тележка. Например:

 

http://radikal.ru/

SergeS · 13.03.2016
В стандартном можно сделать интервал, каждую минуту. )

 

Да, действительно, можно, странно... Последний раз смотрел наверное года полтора назад, почему то отложилось, что низзя. Ладно, спасибо, то ли не заметил, то ли тогда не было и потом добавили. Виноват, исправлюсь.

diemon · 13.03.2016
Да, действительно, можно, странно... Последний раз смотрел наверное года полтора назад, почему то отложилось, что низзя. Ладно, спасибо, то ли не заметил, то ли тогда не было и потом добавили. Виноват, исправлюсь.

 

Ну хоть для кого-то эта тема принесла пользу!))

А мне пока нет...

Неужели я первый кто задался этим вопросом? Что делать-то?)))

satoorn · 14.03.2016
Ну хоть для кого-то эта тема принесла пользу!))

А мне пока нет...

Неужели я первый кто задался этим вопросом? Что делать-то?)))

Дайте вывод команд, в папке со скриптом, предварительно зайдя телнетом:

cat script.sh

ls -l

diemon · 16.03.2016
Дайте вывод команд, в папке со скриптом, предварительно зайдя телнетом:

cat script.sh

ls -l

 

 

Вот:

 

/volume1/Archive # cat Delete_old_files.sh
#!/bin/sh
find /volume1/NVR_Archive -type f -mtime 4 -exec rm -rf {} \; 
find /volume1/NVR_Archive -type d -mtime 4 -exec rm -rd {} \; 

/volume1/Archive # ls -l
-rwxrwx---    1 diemon   users          135 Mar 13 19:00 Delete_old_files.sh

 

Кстати, по не понятной причине, сейчас запустил его вручную из задания и файлы из папок были удалены... Но как-то странно удалены. Папки все остались, а файлы удалены, причем файлы в некоторых папках остались...

 

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

Установил... Но тем не менее остались файлы и папки, который не удаляются по каким-то причинам..

 

Вот права папок, в подобие которых удалилось все и сами папки были удалены:

volume1/NVR_Archive/20160316 # ls -l
drwx------    3 NVR      users        12288 Mar 16 23:07 images
drwx------    2 NVR      users        12288 Mar 16 23:07 record

/

 

А вот те, что не были удалены:

/volume1/NVR_Archive/20160310 # ls -l

drwx------ 2 NVR users 4096 Mar 17 00:25 images

/volume1/NVR_Archive/20160310 # cd images

/volume1/NVR_Archive/20160310/images # ls -l

-rwx------ 1 NVR users 312084 Mar 10 19:00 A16031019000710.jpg

-rwx------ 1 NVR users 356467 Mar 10 19:00 A16031019000810.jpg

 

 

Почему они не были удалены - не понятно...

 

Да... и еще..

Код перепсал так: и только после этого вроде как заработало.. Это очень странно...

#!/bin/sh
find /volume1/NVR_Archive -type f -mtime 3 -exec rm -r f {} \; 
find /volume1/NVR_Archive -type d -mtime 3 -exec rm -r d {} \;

 

Обратите внимание раньше было "rm -rd", а теперь стало: "rm -r d"

Буду еще проверять.

satoorn · 28.03.2016
Вот:

 

/volume1/Archive # cat Delete_old_files.sh
#!/bin/sh
find /volume1/NVR_Archive -type f -mtime 4 -exec rm -rf {} \; 
find /volume1/NVR_Archive -type d -mtime 4 -exec rm -rd {} \; 

/volume1/Archive # ls -l
-rwxrwx---    1 diemon   users          135 Mar 13 19:00 Delete_old_files.sh

 

Кстати, по не понятной причине, сейчас запустил его вручную из задания и файлы из папок были удалены... Но как-то странно удалены. Папки все остались, а файлы удалены, причем файлы в некоторых папках остались...

 

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

Установил... Но тем не менее остались файлы и папки, который не удаляются по каким-то причинам..

 

Вот права папок, в подобие которых удалилось все и сами папки были удалены:

volume1/NVR_Archive/20160316 # ls -l
drwx------    3 NVR      users        12288 Mar 16 23:07 images
drwx------    2 NVR      users        12288 Mar 16 23:07 record

/

 

А вот те, что не были удалены:

/volume1/NVR_Archive/20160310 # ls -l

drwx------ 2 NVR users 4096 Mar 17 00:25 images

/volume1/NVR_Archive/20160310 # cd images

/volume1/NVR_Archive/20160310/images # ls -l

-rwx------ 1 NVR users 312084 Mar 10 19:00 A16031019000710.jpg

-rwx------ 1 NVR users 356467 Mar 10 19:00 A16031019000810.jpg

 

 

Почему они не были удалены - не понятно...

 

Да... и еще..

Код перепсал так: и только после этого вроде как заработало.. Это очень странно...

#!/bin/sh
find /volume1/NVR_Archive -type f -mtime 3 -exec rm -r f {} \; 
find /volume1/NVR_Archive -type d -mtime 3 -exec rm -r d {} \;

 

Обратите внимание раньше было "rm -rd", а теперь стало: "rm -r d"

Буду еще проверять.

 

А если так:

find /volume1/NVR_Archive -type f -mtime +2 -exec rm -r {} \; # удаляет файлы которым более 2-х дней начиная с /volume1/NVR_Archive

find /volume1/NVR_Archive -type d -mtime +2 -exec rm -rd {} \; # удаляет пустые директории начиная с /volume1/NVR_Archive

dogboy · 18.06.2020

:angry:

Друзья всем привет.

 

Возникла проблема:

cp -R /volume1/backup1/folderA volume2/cncmaint/folderB/$(date +%U) - из терминала обрабатывается, создается папка файлы копируются.

 

Когда записываю данную команду в крипт (планировщик заданий)

#!/bin/bash

cp -R /volume1/backup1/folderA volume2/cncmaint/folderB/$(date +%U)

не чего не происходит.

 

Если запустить скрипт sh copy.sh получаю вот ошибку:

:/volume2/cncmaint$ sh copy.sh

cp: cannot create directory ‘volume2/cncmaint/folderB/24’: No such file or directory

 

Подскажите, что не так.

 

kucher · 18.06.2020

Вы помещаете скрипт в планировщик заданий интерфейса Synology и стартуете его от root?

Рабочий пример авто-реконнекта NAS к серверу OVPN:

d6070c4222265ca29e090427796d49d1.png

 

5aaf3e71221f9b577fbc14034f1fc47a.png

 

0b70d7f12c086ccc6799cebec3557251.png

"На вкладке "настройка задач" в поле "Скипт заданный пользователем" у меня это:

if ping -c 4 10.0.1.1 >> /dev/null
then
exit 0
else
cp /volume1/scripts/vpnc_connecting /usr/syno/etc/synovpnclient/
/usr/syno/bin/synovpnc connect --id=o1579796620
fi

10.0.1.1 - шлюз OVPN сервера.

--id - подбирается индивидуально, он присваивается системой при создании очередного подключения в списке интерфейсов. Тут не буду объяснять как его найти.

Т.е. операция копирования проходит без проблем, если из под root.

ent · 18.06.2020

Прав на каталог/файл не хватает у пользователя.

dogboy · 18.06.2020

Спасибо, у меня все сделано так

5d06d7674fe000f695d93c689cce0337.jpg

f82d16c2a5b7c484215be851ea140b3a.jpg

7026dfa33424249cabd367631173cb9e.jpg

6249b5e4b2ed1e7aa7a9d6c4a5b4a4a8.jpg

если ввожу команду напрямую то все работает, как я хочу

0273161670e49b7f5b6a353ed85f47af.jpg

Но таже самая команда в sh файле вываливает ошибку.

 

968edfdf9682e1ed67da2366afe2d850.jpg

сам файл

Для теста сделал sh с таким содержимым:

#!/bin/bash

mkdir /volume2/cncmaint/folderB/$(date +%U)

 

он обрабатывается каталог создается. И в интерфейсе синоложи и в терминале.

kucher · 18.06.2020

Думаю что тут дело в синтаксисе. У меня Линукса под рукой сейчас нет, а с работающим NAS я баловаться не имею никакого желания, но у меня Ваш пример на виртуалке FreeBSD тоже ошибку выдаёт. А срабатывает вот это:

cp -R /usr/local/1/2 /usr/local/1/3/`date +%U`

Обратите внимание, кавычки здесь обратные.

dogboy · 19.06.2020
Думаю что тут дело в синтаксисе. У меня Линукса под рукой сейчас нет, а с работающим NAS я баловаться не имею никакого желания, но у меня Ваш пример на виртуалке FreeBSD тоже ошибку выдаёт. А срабатывает вот это:

cp -R /usr/local/1/2 /usr/local/1/3/`date +%U`

Обратите внимание, кавычки здесь обратные.

Спасибо из терминала отработалась, из скрипта нет. Заметил интересную особенность. После запуска скрипта перестает работать и из терминала.

 

3a1332115dd9ba458321e469c4755d17-full.jpg радикал

 

#!/bin/bash

cp -R /volume1/backup1/folderA volume2/cncmaint/`date +%U`

 

Кстати заменил еще вот что,

admin@test_atklg:/$ echo $SHELL

/bin/sh

поменял в скрипте все равно та же ошибка

#!/bin/sh

cp -R /volume1/backup1/folderA volume2/cncmaint/`date +%U`

dogboy · 19.06.2020

Коллеги с вашей помощью я разобрался в моей проблем, дело было не команде а в том что я пропустил слеш :lol:

выкладываю скриншоты:

недельное резервное копирование:

00ffbac6b70ddd041e7e79a446dde8cc-full.jpg радикал

 

 

 

годовое:

86f6791a3c2c6df63ba8d73fd8717324-full.jpg радикал

 

Пока тест, в дальнейшем заменю копирование на перемещение.

 

Если кому интересно:

опишу процесс:

1. В папку А складываются определенные логи (размер 1кб). В начале следующей недели у меня они начинаются с воскресенья. Все содержимое папки А перемещается в том2 в бэкап с номером недели 00-53

2. в конце года все папки из тома 2 перемещаются в архив с названием года.

И начнется новая запись

Корн · 15.11.2020

А ни у кого случайно WebDAV Server не виснет? У меня в последнее время по 2-3 раза в день зависает, юзеры звонят жалуются. Может кто нибудь в курсе как к нему какой нибудь wathdog прикрутить, чтобы проверял периодически, на доступность и если не доступен то выполнялся бы рестарт сервиса WebDAV Server на NAS'е. Такое вообще возможно интересно или я слишком многого хочу? Был бы признателен за пример команды, для добавления в планировщик.

 

P.S. Только не понятно как проверять висит служба или нет. Со стороны пользователей зависание сервиса выглядит как бесконечные тормоза в попытке поработать с документом открытым с NAS'а. При попытке подключиться к шаре, программы-клиенты отрабатывают бесконечную попытку истекающую по встроенному тайм-ауту. А как только я логинюсь на веб-интерфейс, останавливаю WebDAV и запускаю его по новой, все проблемы у юзеров заканчиваются. Документы больше не тормозят, подключение к шаре происходит моментально и т.д. Пока опять всё это не зависнет. Причём весь NAS не виснет... только WebDAV Server... Отловить бы источник проблемы... первые два года вообще не зависало ничего. Потом раз в пару недель... а сейчас уже по три раза в день...

 

P.P.S. Единственное что сейчас сам прописал, это в планировщике в 6 утра ежедневно останавливается WebDAV Server, и потом следующей задачей ежедневно в 6.01 запускается WebDAV Server. Чтобы на момент начала рабочего дня он хотябы был недавно перезапущенным и мне не звонили в 7-8 утра по этой проблеме... С таким головняком даже в отпуск не смотаешься толком.