Crontab 启动时运行脚本

Crontab 启动时运行脚本

我有一个执行命令的 .sh。我想使用 crontab -e 并进入文件 @reboot /path/to/command。

如何在一个命令中执行此操作,而不是单独运行 crontab -e,然后手动插入行,然后保存文件。

答案1

当您使用时crontab -e将创建一个文件,/var/spool/cron/crontabs/其名称等于您的用户名。

因此只需将您想要的行重定向到此文件:

echo "@reboot /path/to/file.sh" | sudo tee -a /var/spool/cron/crontabs/$USER
  • tee -a我们使用它tee来附加到@reboot /path/to/file.sh该文件的末尾而不是覆盖它。
  • 如果不存在,则会创建它。

答案2

可能是正确的这样做的方法 - 如上所述如何以编程方式添加新的 crontab 文件而不替换前一个文件- 是将现有的 crontab 转储到临时文件,修改它,然后将其读回。例如:

cmd='@reboot /path/to/file'
tmpfile=$(mktemp) && crontab -l > "$tmpfile"
cmd='@reboot /path/to/command'
grep -Fxq "$cmd" "$tmpfile" || echo "$cmd" >> "$tmpfile"
crontab "$tmpfile" && rm -- "$tmpfile"

如果你不介意检查的话,一个“快速而粗略”的选择是

crontab -l | sed '$a@reboot /path/to/command' | crontab -

假设 GNU sed 允许a在一行上附加文本。


注意:与直接写入不同/var/spool/cron/crontabs,这种方法不需要sudo(因为crontab是 setuid)。

相关内容