我想通过设置计划任务,anacron
但我想在用户模式下进行设置。我该如何实现?
答案1
您可以设置一个单独的 anacron 实例以在用户模式下运行:
.anacron
在主目录中创建一个文件夹并在其中创建两个子文件夹,etc
然后spool
:mkdir -p ~/.anacron/{etc,spool}
创建一个新文件
~/.anacron/etc/anacrontab
,其内容类似于以下内容:# /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details. SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # period delay job-identifier command 1 10 testjob test.sh
使用以下行添加到你的 crontab 中
crontab -e
:@hourly /usr/sbin/anacron -s -t $HOME/.anacron/etc/anacrontab -S $HOME/.anacron/spool
答案2
这对我有用(谢谢),但我没有使用答案中给出的最后一步:
然后将以下行添加到您的
~/.profile
:
我正在使用 Ubuntu Studio 12.10 Quantal,在我的例子中,我没有执行最后一步,而是在此处输入了一行代码:“应用程序菜单”→“设置”→“设置管理器”,然后在设置管理器中的“会话和启动”下,选择“应用程序自动启动”选项卡。
这是为我们这些 GUI 用户准备的,因为~/.profile
只有在 bash 启动登录交互式 shell 时才会提供它(甚至~/bashrc
不是那么有用,因为它只有在 bash 启动交互式 shell 时才会提供它)。
答案3
上面显示的 anacrontab 存在问题:anacron 仅在 PATH 指定的目录中查找可执行文件。因此它找不到 test.sh。
更好的解决方案是使用命令 run-parts:
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# period delay job-identifier command
1 10 dailyjob run-parts ${HOME}/.anacron/daily/
这要求我们每天创建目录:
mkdir -p ~/.anacron/{etc,spool,daily}
run-parts 不会执行名称中带有“.”的脚本,例如“test.sh”,因此请将脚本重命名为“my-test”。
还有另一个问题:如果计算机不是 24/7 全天候运行,那么就无法控制每日脚本的运行时间。我有一个网页抓取脚本,我想在上午 11 点左右或当天晚些时候运行。我通过在“at”设施中安排网页抓取作业(sudo apt install at)来解决这个问题。
所以我有一个 daily/crawl 脚本,如下所示:
#!/bin/bash
preferred_time="11:15"
scheduled_time="${preferred_time}"
preferred_time_as_number="${preferred_time/:/}"
current_time_as_number=$(date +%H%M)
if [ "${current_time_as_number}" -ge "${preferred_time_as_number}" ]; then
scheduled_time="NOW"
fi
at -M -f "${HOME}/bin/crawl-dagpris.sh" "${scheduled_time}"