#!/bin/bash

for i in {1..10}; do 
    timeout 1 gnome-screensaver-command -l
done

Выполнение этого как однострочная команда в терминале (без #!/bin/bash) будет блокировать мой компьютер в течение 10 секунд, а разблокировать его невозможно. Это желательно.

Однако, когда я запускаю это через скрипт, он блокирует его только один раз, но после этого я могу немедленно разблокировать и использовать компьютер. Пожалуйста, помогите мне.. Я хочу автоматизировать это и использовать это как работу cron. Как заставить это работать?

Это все, что у меня есть в моем файле cron:

1 * * * * for i in {1..5}; do timeout --foreground 1 gnome-screensaver-command -l; done > test

Это даже не будет работать. Тестовый файл не отображается. Когда я запускаю service cron status , в последнее время не запускается ни одно задание, хотя я и приказал ему запускать скрипт каждую минуту.

1 ответ1

1

Более важный вопрос: почему вы запускаете команду 10 раз в течение 1 секунды, а не 1 раз в течение 10 секунд? Тебе даже не понадобится петля. Если это мешает кому-то еще ввести пароль и разблокировать компьютер, возможно, вам следует просто изменить пароль и сохранить его при себе.


Есть программное обеспечение для управления временем, вы можете попробовать его, например, Pomodoro:

Это приложение GNOME помогает управлять временем в соответствии с техникой Pomodoro. Он намерен повысить производительность и качество работы, напоминая вам делать короткие перерывы.

Техника Pomodoro основана на двух принципах:

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

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

Посмотрите этот вопрос на askubuntu. Доступно ли приложение Pomodoro ? Он также рекомендует tomate среди других.


Если вы хотите "остановить" определенную программу на некоторое время, вы можете использовать kill -STOP pid или pkill -STOP pattern , как в

kill -STOP pid
sleep $seconds
kill -CONT pid

Остановка любой программы, из которой вы хотите сделать перерыв, позволит остальной системе работать. Я бы не хотел останавливать что-то более важное, например, оконный менеджер или X/xorg.


Cron не ведет себя точно так же, как терминал обычного пользователя, он может даже не знать, где находятся некоторые команды. Вы можете попробовать:

  • Выполнение команды от имени пользователя с помощью команды sudo -u [YourUser] command (см. Man sudo для получения дополнительной информации о -u).

  • Добавьте полный путь к команде (найдено с помощью which [command] или ищите установленные файлы пакета с помощью dpkg или apt/synaptic и т.д.


Похоже, timeout ведет себя по-разному, когда он запускается в интерактивном терминале, по сравнению с сценарием. Чтение этой информационной страницы показывает вариант, который, я думаю, вы могли бы использовать:

'--Foreground'
Не создавайте отдельную группу фоновых программ, чтобы управляемая КОМАНДА могла нормально использовать TTY переднего плана. Это необходимо для поддержки команд тайм-аута, не запускаемых непосредственно из интерактивной оболочки, в двух ситуациях.

  1. КОМАНДА интерактивна и требует чтения с терминала, например
  2. пользователь хочет поддерживать отправку сигналов непосредственно в COMMAND с терминала (например, Ctrl-C)

    Обратите внимание, что в этом режиме работы все дочерние элементы команды не будут заблокированы. Также SIGCONT не будет отправляться в COMMAND, так как он обычно не требуется для процессов переднего плана, и может вызывать проблемы с прерывистой доставкой сигналов в программах, которые сами контролируют (например, GDB).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .