Рейтинг:1

Работа Crontab работает только один раз

флаг fi

я создал 60 кронтаб рабочие места для запуска питон сценарий каждый второй и скрипты python это был просто тест, и он содержит только следующее:

импортировать уведомление2
из даты и времени импортировать дату и время

уведомление2.init('')

n = notify2.Notification('тест', datetime.now().strftime('%I:%M:%S'))
n.set_timeout(1000)
н.показать()

и задание crontab:

* * * * * DISPLAY=':0' XAUTHORITY='/run/user/1000/gdm/Xauthority' python3 /path/to/my/script.py
* * * * * ( sleep 1 && DISPLAY=':0' XAUTHORITY='/run/user/1000/gdm/Xauthority' python3 /path/to/my/script.py )
* * * * * ( sleep 2 && DISPLAY=':0' XAUTHORITY='/run/user/1000/gdm/Xauthority' python3 /path/to/my/script.py )
.
.
.
.
.

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

Я добавляю задание crontab, чтобы проверить, будет ли оно работать (* * * * * env > /home/hadi/Desktop/env.output) и работал нормально. Вот содержимое выходного файла:

POWERSHELL_TELEMETRY_OPTOUT=1
DOTNET_CLI_TELEMETRY_OPTOUT=1
HOME=/дом/хади
COMMAND_NOT_FOUND_INSTALL_PROMPT=1
LOGNAME=хади
ПУТЬ=/USR/бен:/бен
ЯЗЫК=en_US.UTF-8
ОБОЛОЧКА=/бин/ш
JAVA_HOME=/usr/lib/jvm/jdk-15.0.2
PWD=/дом/хади

Я так понимаю проблема с уведомлением, как это исправить?

и еще кое-что, ДИСПЛЕЙ=':0' несколько раз я должен установить его на 1 нет 0 я не знаю, почему

флаг za
Вы не должны запускать 60 cronjobs. Если вы не можете сделать это в Python, запустите скрипт, который запускает 60 заданий (например, в цикле).Лучше: не запускайте его с помощью cron, а xinitrc, оставьте его работающим и приостановите его на 1 с, а в случае сбоя перезапустите задание.
HaDi AyOuB avatar
флаг fi
что это обозначает? @неизвестный пользователь
HaDi AyOuB avatar
флаг fi
Я хочу, чтобы один и тот же скрипт выполнялся каждую секунду. Если я использовал цикл, выполнение заблокирует цикл до тех пор, пока выполнение текущего задания не будет завершено.
флаг za
Нет, вы можете запустить основную команду в фоновом режиме.
HaDi AyOuB avatar
флаг fi
Хорошо, как это сделать? не могли бы вы объяснить больше, пожалуйста?
Рейтинг:1
флаг za

С помощью постфикса & вы можете запустить свой скрипт Python в фоновом режиме. Даже если экземпляр заблокирован и зависает навсегда или завершается за небольшую долю секунды, следующее задание начнется на секунду позже.

#!/бин/баш

пока правда 
делать
  спать 1
  python3 /path/to/my/script.py &
сделано 

Cron не подходит для более тонкой грануляции времени, чем минутная. Таймеры Systemd можно использовать для более тонкой детализации, но если вы вообще не хотите ограничивать время, задание следует просто запустить, когда это необходимо, в процедуре запуска.

Поскольку в вашем коде используется DISPLAY=:0, он может быть запущен как системный модуль, в зависимости от graphical.target, чтобы избежать его вызова до того, как графическая система будет запущена.

Циклический сценарий может накапливать большее количество расхождений во времени с течением времени и 3597 раз в час вместо 3600, но, возможно, «примерно один раз в секунду» будет достаточно. Если нет, то вы должны сами измерить время и исправить себя.

Например, хорошее введение в systemd доступно на YT.

HaDi AyOuB avatar
флаг fi
если я выполнил свой скрипт python3 в цикле, и этот скрипт использует модуль запроса, то цикл будет заблокирован до тех пор, пока скрипты не будут завершены. Я хочу выполнять один и тот же скрипт ровно каждую секунду. Возможно ли это?
флаг za
Я не знаю Python, поэтому я не знаю модуль запроса и не знаю, как его протестировать. ИМХО, если питон запускается как поток, он не должен иметь возможности что-то блокировать, несмотря ни на что, и цикл должен продолжаться. Можете ли вы предоставить минималистичный скрипт Python для вызова в цикле, чтобы доказать свою точку зрения?

Ответить или комментировать

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