#!/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
更大的问题是,为什么要运行该命令 10 次,每次 1 秒,而不是 1 次,每次 10 秒?那么你甚至不需要循环。如果是为了阻止其他人输入密码并解锁计算机,也许你应该更改密码并保密。
有一些软件可以帮助管理时间,你可以尝试一下,比如番茄工作法:
这款 GNOME 应用可帮助您根据以下情况管理时间:番茄工作法。它旨在通过提醒您短暂休息来提高工作效率和工作质量。
番茄工作法基于两个原则:
- 专注于有限的工作时间,大约半小时,
- 休息时清理思绪。
这种工作流程可以提高注意力、身体健康和思维敏捷性,具体取决于您如何度过休息时间以及您遵循常规的严格程度。
在 askubuntu 上查看此问题有可用的番茄工作法应用程序吗?,它还建议番茄等等。
如果你想暂时“停止”某个程序,你可以使用kill -STOP pid
或pkill -STOP pattern
,例如
kill -STOP pid
sleep $seconds
kill -CONT pid
停止任何你想暂停的程序都会让系统的其余部分继续工作。我真的不想尝试停止更重要的东西,比如窗口管理器或 X/xorg。
Cron 的行为与普通用户的终端并不完全相同,它甚至可能不知道某些命令在哪里。您可以尝试:
以您的用户身份运行该命令,通过
sudo -u [YourUser] command
(有关的更多信息,请参阅 man sudo-u
)。添加命令的完整路径(通过或使用apt/synaptic 等
which [command]
搜索包的安装文件找到)。dpkg
听起来timeout
它在交互式终端中运行时的行为与在脚本中运行时的行为不同。阅读它的信息页面会发现一个我认为你可以使用的选项:
'--foreground'
不创建单独的后台程序组,以便托管的 COMMAND 可以正常使用前台 TTY。在两种情况下,这需要支持未直接从交互式 shell 启动的超时命令。
- COMMAND 是交互式的,需要从终端读取,例如
用户希望支持从终端直接向 COMMAND 发送信号(例如 Ctrl-C)
请注意,在此操作模式下,COMMAND 的任何子进程都不会超时。此外,SIGCONT 不会发送到 COMMAND,因为前台进程通常不需要它,并且它可能会导致本身就是监视器的程序(例如 GDB)出现间歇性信号传递问题。