Каким-то образом выйти из php-скрипта, но оставить его работающим [дубликат]

Обратите внимание, что -mtime 15 означает «чей возраст, округленный до следующей 24-часовой единицы, составляет 15» , то есть файлы, измененные между 14 * 24 часов назад и 15 * 24 часов назад (обратите внимание, что мы не говорим здесь о днях , поскольку во многих часовых поясах у вас есть один 23-часовой день и один 25-часовой день в году ). Предполагая, что это то, что вы хотите, с помощью zsh вы можете сделать:

ls -lrtd -- **/ABC1[23](D.m15)

Или:

find . -type f -name 'ABC1[23]' -mtime 15 -exec ls -lrtd {} +

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

Используя zsh и GNU ls , вы можете обойти это с помощью:

autoload zargs
zargs -- **/ABC1[23](D.m15Om) -- ls -lUd

То есть, пусть zsh выполнит сортировку и передаст список в один или несколько вызовов ls по мере необходимости, но сообщающих ls не сортировать список. Для других реализаций ls вы можете заменить U на rt , чтобы позволить ему выполнить еще одну бесполезную, но безвредную сортировку.

Если вам нужен диапазон вроде ABC17 -> ABC23 вместо только ABC12 , ABC13 , с zsh , вы должны сделать:

ls -lrtd -- **/ABC<17-23>(D.m15)

(обратите внимание, что ABC <17-23> соответствует ABC17 , но также ABC0000017 .Если это проблема, измените <17-23> на (<17-23> ~ ^ ??) ( extendedglob параметр, необходимый для шаблона ~ exclude glob operator), чтобы гарантировать соответствие только двухзначным числам, или (<17-23> ~ 0 *) , чтобы исключить числа с начальным 0).

Если это файл, имя которого начинается с с ABC12 , а не с на ABC12 , то вы должны сделать

ls -lrtd -- **/ABC<17-23>*(D.m15)

Но учтите, что это также будет соответствовать ABC170. Чтобы этого избежать:

setopt extendedglob
ls -lrtd -- **/ABC<17-23>^[0-9]*(D.m15)

То есть <17-23> , за которым следует что-нибудь, кроме того, что начинается с десятичной цифры.

Эквивалент поиска (хотя не позволяет нули в начале и с проблемой, описанной выше для большого количества файлов, а также с потенциальными проблемами, если имена файлов содержат недопустимые символы, и с ./ ] для всех файлов) будет выглядеть примерно так:

find . \( -name 'ABC1[7-9]*' -o -name 'ABC2[0-3]*' \) \
       ! -name 'ABC??[0-9]*' -mtime 15 -type f \
      -exec ls -lrtd {} +
2
28.03.2017, 20:01
2 ответа

Вы можете выполнить это с помощью команды nohup, если она установлена.

цитата из https://www.cyberciti.biz/tips/nohup-execute-commands-after-you-exit-from-a-shell-prompt.html

синтаксис команды nohup:
Синтаксис следующий

nohup имя-команды &

ИЛИ
nohup / путь / к / имя-команды арг1 аргумент2 &

Где,

  • имя-команды: имя оболочки имя сценария или команды. Вы можете передать аргумент команде или сценарию оболочки.
  • &: nohup не помещает автоматически выполняемую команду в фоновый режим; вы должны сделать это явно, завершив командную строку символом &.
  • Вам также может быть лучше настроить это задание, если вам придется регулярно запускать его как задание crontab на сервере.

    1
    27.01.2020, 21:56

    Нажмите Ctrl + Z , чтобы приостановить процесс. Затем выполните следующие две команды:

    bg
    disown %1
    

    После этого вы сможете выйти из системы и оставить процесс запущенным без вас. Но вы больше не сможете взаимодействовать с процессом каким-либо образом (кроме как убить его).

    В будущем вы можете посмотреть на screen , nohup или tmux для длительных процессов.

    4
    27.01.2020, 21:56

    Теги

    Похожие вопросы