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)。