LINUX.ORG.RU
решено ФорумAdmin

Копирование файла через timeout

 


1

3

Всем привет

пробую копировать файл с органичением времени выполнения:

timeout 30 cp /path1/test /tmp/test
получаю

cp: /tmp/test: No such file or directory

при этом команда без timeoute работает

подскажите как правильно это запускать?

Спасибо

★★★

Ответ на: комментарий от zolden

если подскажешь лучше решение чем timeout буду признателен

fura13 ★★★
() автор топика
Ответ на: комментарий от fura13

Тебе как бы намекают, что ты решаешь проблему не с той стороны.

anonymous
()

нашел «костыльное» решение:

touch /tmp/test
timeout 30 cp /path1/test /tmp/test

но это какаято дичь), явно что-то с передачей аргументов от timeout к cp но никакие экранирования и кавычки не помогают, и не гуглится =\

fura13 ★★★
() автор топика
Ответ на: комментарий от svr4

подскажите пожалуйста какой опцией ionice мне отменить копирование если оно длится более заданного времени?

fura13 ★★★
() автор топика

УМВР.

Debian GNU/Linux Stretch. GNU coreutils 8.26.

Zmicier ★★★★★
()
Ответ на: комментарий от fura13

ionice для того, чтобы не мешать использовать диск другим приложениям. Копируется себе и копируется, пусть хоть час.

svr4
()
Ответ на: комментарий от vodz

Неправильные вопросы порождают неправильные ответы

zolden ★★★★★
()
Ответ на: комментарий от Pinkbyte

Тоже из серии «реальные данные изменены» :) Ведь для аргументов без "-" защита с двумя минусами не нужна.

vodz ★★★★★
()
Ответ на: комментарий от vodz

Ведь для аргументов без "-" защита с двумя минусами не нужна.

Гугли дальше где еще применяется --

Подсказка - этот разделитель применяется не только как экранирование параметров с одиночным '-', но также, например, в случае разделения одного аргумента, позиционного стоящего в конце списка передаваемых параметров, от неизвестного количества других, стоящих в начале(или наоборот, что мы видим на примере здесь). И еще в некоторых других случаях, гугл в помощь, как я уже сказал.

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 2)
Ответ на: комментарий от Pinkbyte

Я то в курсе. Конкретно для timeout(1) это всё не о том, тем более ваше объяснение какая-то отсебятина, да ещё хамская.

vodz ★★★★★
()
Ответ на: комментарий от vodz

тем более ваше объяснение какая-то отсебятина

А мужики-то и не знают...

The special argument "--" forces an end of option-scanning regardless of the scanning mode. 

хамская

Ого, ЛОР-то становится институтом благородных девиц, где за явное указание в сторону манов могут оскорбиться!

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

Так и что, вот та строчка как-то похожа на вашу отсебятину? Она переводится ровно так, как было сказано у меня, сюрприз.

vodz ★★★★★
()
Ответ на: комментарий от vodz

Так и что, вот та строчка как-то похожа на вашу отсебятину?

Моя «отсебятина» именно об этом и говорит - о различии параметров, не отпирайся. Ты же только ратовал что это «не по условиям задачи» и то, что -- здесь не нужен, потому что аргументы cp не имеют -

Просвети меня, что еще использовать если не -- для различия опций передаваемых вызываемой команде и самому timeout? Как различать кому относятся совпадающие опции - если кто-то реализует в вызываемой команде опцию идентичную той, которую можно передать timeout(например --foreground)?

И как вообще без использования подобной опции решать эту задачу?

У меня есть идеи, но они на фоне имеющегося решения - унылое говно, поэтому я их озвучивать не буду.

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 4)
Ответ на: комментарий от Pinkbyte

Просвещаю. «option-scanning» в переводе на русский - поиск опций, то есть аргументов, начинающихся с '-'. ТС привел комманду копирования без использования опций. Если он словил проблему с «option-scanning», то только потому, что «реальные данные изменены», с чего я и начал, а вы развели срач, как обычно не вникая в текст.

vodz ★★★★★
()
Ответ на: комментарий от vodz

Просвещаю. «option-scanning» в переводе на русский - поиск опций, то есть аргументов, начинающихся с '-'.

Не только. Читай ман тщательнее

optstring is a string containing the legitimate option characters... If getopt() does not recognize an option character, it prints an error message to stderr, stores the character in optopt, and returns '?'. The calling program may prevent the error message by setting opterr to 0.

Отсюда 2 вывода:

1) '-' в качестве указателя на опцию не захардкожено;
2) Можно реализовать свою логику парсинга опции через кастомный optstring и подавление ошибок;

И вот тут на сцену выступает захардкоженный ограничитель парсера.

ТС привел комманду копирования без использования опций. Если он словил проблему с «option-scanning», то только потому, что «реальные данные изменены», с чего я и начал, а вы развели срач, как обычно не вникая в текст.

Я воспроизвел проблему ТСа ровно на таких же аргументах cp.

Более того, в качестве примера того, где -- эксплуатируется в хвост и в гриву рекомендую посмотреть на скрипты Xorg - startx и xinit

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 4)
Ответ на: комментарий от vodz

Вы бы попробовали ради прикола в гугле набрать «getopt vodz».

Аргументация уровня «а у меня зато орден есть». Ну окей, давайте поиграем по вашим правилам: советую вам набрать «gentoo pinkbyte» и прикинуть насколько часто мне приходится возиться с парсингом аргументов передаваемых бог знает чему.

А теперь если без троллинга - аргументированно можете объяснить почему delimiter, созданный для того, чтобы вызываемая программа знала, когда перестать парсить argv и отдала остаток другой(переданной ей в качестве одного из аргументов) - не является решением проблемы ТСа?

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

Нее, что вы. Я лишь попробовал обломать ваше хамство. Ведь это же облом, когда вдруг оказывается, что посылаешь к ману человека, который на этой самой функции 100 собак съел и имеет копирайты в ibm, vmware, cisco и т д, в данном случае иммено по этой фунции

Конкретно ТС-а, то что гадать. У него и надо спрашивать, на какую он проблему нарвался. Если никакие данные в реальности не изменены, то никакая — тут не при чём.

vodz ★★★★★
()
Ответ на: комментарий от vodz

ionice для того, чтобы не мешать использовать диск другим приложениям. Копируется себе и копируется, пусть хоть час.

Нету такой цели. нужно тобы скрипт не выполнялся более отведенного времени, копирование является «узким местом», например если пользователь захочет копировать большой файл или файл находится на медленном диске\сетевой шаре

Неправильные вопросы порождают неправильные ответы

фантазии и домыслы порождает уверенность, что заданные вопросы неправильные и в дальнейшем порождают никому ненужные ответы от этих «фантазеров»

timeout 30 cp — /path1/test /tmp/test

то что нужно, помогло, спасибо большое

fura13 ★★★
() автор топика
Ответ на: комментарий от vodz

Я лишь попробовал обломать ваше хамство. Ведь это же облом, когда вдруг оказывается, что посылаешь к ману человека, который на этой самой функции 100 собак съел и имеет копирайты в ibm, vmware, cisco и т д, в данном случае иммено по этой фунции

Но при этом не может объяснить, почему эта функция здесь не при чём. Просто «не при чём», если не согласен, вот мои регалии.

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

Pinkbyte ★★★★★
()
Ответ на: комментарий от fura13

помогло, спасибо большое

Всегда пожалуйста. Меня больше смущает, почему тебе touch помог. Ты точно уверен что скопировался при этом весь файл в пределах времени заданного timeout. А не просто остался пустой файл на 0 байт, но просто не было ошибки?

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

Почему не могу? На вопрос, заданный по человечески - могу. Берем man на timeout:

SYNTAX: timeout [-s signal] seconds program [args]

EXAMPLE: timeout 10 pap foo.ps

Там тоже дураки с регалиями это писали?

Если у ТС-а без '--' не работает, то он смело может отправлять баг-репорт. У меня вот это «timeout 1 sleep 2» - говорит Terminated, то есть работает.

vodz ★★★★★
()
Ответ на: комментарий от vodz

SYNTAX: timeout [-s signal] seconds program [args]

Это timeout из busybox? Потому что у timeout из состава coreutils 8.25 другой man. И другой набор параметров.

NAME
       timeout - run a command with a time limit

SYNOPSIS
       timeout [OPTION] DURATION COMMAND [ARG]...
       timeout [OPTION]

К слову, timeout из состава busybox:

~/1 $ timeout --help
BusyBox v1.25.1 (2017-01-10 13:32:53 MSK) multi-call binary.

Usage: timeout [-t SECS] [-s SIG] PROG ARGS

Runs PROG. Sends SIG to it if it is not gone in SECS seconds.
Defaults: SECS: 10, SIG: TERM.

~/1 $ timeout 10 cp 1 2
timeout: can't execute '10': No such file or directory
~/1 $ timeout -t 10 cp 1 2

Другой список аргументов(требуется -t), так что это не оно. Но согласен, здесь не используется --, поэтому поведение timeout из coreutils это либо особенность реализации, либо баг.

Вот с этой аргументации(выхлоп команд, Карл!) и стоило бы начинать в ответ на мой способ - избежали бы никчёмной перепалки и мерянием регалиями(непонятно зачем).

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 2)
Ответ на: комментарий от Pinkbyte

Это timeout из busybox?

Ну видно же невооружённым глазом, что явно же не от туда, раз синтакс не совпадает?

Выхлоп надо было трясти не с меня, а с ТС-а, о чём я и намекал насчёт реальных данных, так как в силу веры в людей необходимость '--' тут настолько странна, что и мысль такая может прийти только путём перебора методом тыка, а не логически.

vodz ★★★★★
()
Ответ на: комментарий от bodqhrohro_official

Кавычки

Ограничивают позиционность аргумента. Без ограничения позиционности - бесполезны.

Pinkbyte ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.