语境
假设有人想要一个名为的 Bash 安装脚本,install.sh
以确保 Ubuntu 22.04picard
在启动时(在后台,不显示 GUI)运行该命令:(启动 GUI)。
方法
我在看:https://askubuntu.com/a/816/846880可以通过输入以下命令手动执行此操作:
crontab -e
[1] (to select the favourite editor)
@reboot /path/to/script
但是,我希望 cronjob 能够自动设置,而不是手动设置。所以我查看了GitHub:并发现这个安装脚本其中包含:
#para crontab -e
#echo "@reboot sudo /home/pi/ili9342-driver/fbcp-ili9342" >> mycron; crontab mycron;rm mycron
问题
但是,这并没有考虑所需的行是否已经在 crontab 中。
问题
因此,我想知道如何让单个 Bash 脚本picard
在启动时自动运行命令?(最好在后台运行而不显示 GUI)
答案1
下面的答案还没有在后台运行 picard,我也没有为它编写单元测试。但它会在重启时从 bash 脚本自动设置 crontab。
run_tribler_at_boot() {
local git_dir="$1"
# Create cronjob command
cron_command="@reboot $git_dir/tribler/src/./tribler.sh > tribler.log"
# Check if crantab contains run at boot line already:
found_cron_command=$(crontab -l | grep "$cron_command")
if [ "$found_cron_command" == "" ]; then
# Add cronjob to crontab if it is not in yet.
write_cronjob "$git_dir" "tribler_cron" "$cron_command"
elif [ "$found_cron_command" == "$cron_command" ]; then
echo "cronjob is already in crontab."
else
echo "Error, the cronjob was not correctly in the crontab"
echo "(most likely the cron_command:$cron_command is in in duplo):"
echo ""
crontab -l
echo ""
echo "Remove the (duplicate) cron_command(s) from the crontab -e"
echo "and try again."
exit 6
fi
}
write_cronjob() {
local git_dir="$1"
local temp_cronjob_filename="$2"
local cron_command="$3"
# Write out the current crontab into a new file with filemname in var mycron.
crontab -l > $temp_cronjob_filename
#echo new cron into cron file through append.
echo "$cron_command" >> $temp_cronjob_filename
#install new cron file
crontab $temp_cronjob_filename
# TODO: Verify the temp_cronjob_filecontent equals the crontab -e output.
#rm $temp_cronjob_filename
}
并且可以这样调用:
run_tribler_at_boot() "~/git"
假设应用程序(在本例中为 tribler)存储到~/git/tribler/src/tribler.sh
要更改为 picard,cron_command
可以将其设置为:
cron_command="@reboot picard"
我还没有弄清楚如何在后台运行它。