Crontab启动时运行脚本

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

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

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

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

 echo "@reboot /path/to/file.sh" | sudo tee -a /var/spool/cron/crontabs/$USER 
  • 使用tee -a我们告诉tee在这个文件的末尾附加@reboot /path/to/file.sh而不是覆盖它。
  • 如果它不在那里它将被创建。

可能正确的方法 – 如在如何以编程方式添加新的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" 

一个“quick’n’dirty”选项 – 如果你不关心检查 – 将是

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

假设GNU sed,它允许在一行上a ppend文本。


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