Мне нужно преобразовать пакетный файл Windows в сценарий оболочки. Как я могу запустить файл.exe в Linux с помощью cron?

Я думаю, вы просите более сложный сценарий. Вы не описали, как определить «последний» прибывший файл, поэтому он просто истекает через 5 секунд бездействия файла, поскольку по крайней мере один файл был передан.

  1. Установить флаг = ожидание
  2. Параллельно :всякий раз, когда файл уведомляется, установите флаг = не выполнено _
  3. Подождите, пока флаг == не будет выполнено _

  4. Пусковой контур

    • Дождитесь подключения USB и запустите процесс синхронизации(rsync)
    • Если какие-либо новые файлы были перенесены, установите флаг = не _выполнено
    • В противном случае
      • Если флаг == возможно _выполнено, тогда установите флаг = определенно _выполнено, в противном случае установите флаг = вероятно _выполнено
    • Если нам потребовалось меньше пяти секунд, подождите оставшееся время
  5. Цикл до флага == однозначно _выполнено

Поскольку нам нужен IPC между основным процессом и параллельным inotifywaitпроцессом, я бы рассмотрел реализацию флага в виде файла, возможно, даже набора имен файлов.

Насколько я могу судить, непросто определить, передал ли rsyncновые файлы. Возможно, вам потребуется сравнить содержимое целевого каталога до и после.

0
04.01.2021, 13:03
1 ответ

Я полагаю, что ОП пытается создать запланированную задачу в Linux из сценария оболочки.

Из того, что они опубликовали, даже отдаленно не ясно, какая именно задача и почему, но обычно это может быть достигнуто путем автоматизации "crontab" из сценария оболочки.

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

Примером того, как это можно сделать, является:

#!/bin/bash
# Create empty temporary file with safe name
TEMPFILE=$(mktemp)

# Put current crontab for user into the temporary file
crontab -l > $TEMPFILE

# Append new command to end of the created file using a shell 'here document'
cat << EOF >> $TEMPFILE
0 0 * * * /bin/df > /tmp/df-date-$(date +%d%b%Y)
EOF

# Load the new extended file in as the crontab for the user
crontab $TEMPFILE

Это всего лишь пример, а не то, что следует копировать напрямую. -Используйте его, чтобы исследовать каждую из демонстрируемых концепций и понимать их.

Возможны проблемы, если у пользователя еще нет файла crontab. Согласно справочной странице man 5 crontabв моей системе, другая проблема заключается в том, что некоторые версии Linux crontab -lдобавляют строку заголовка, что означает, что crontab -l | crontab -(, т.е. попытка экспортировать и повторно импортировать одни и те же данные ), будет продолжать добавлять дополнительные строки заголовка..

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

Значение строки 0 0 * * * /bin/df > /tmp/df-date-$(date +%d%b%Y)см. в документации по cronи crontab. Результатом моего примера будет создание файла в /tmpс выводом команды dfиз системы один раз в день.

2
18.03.2021, 22:38

Теги

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