Bash 安装程序脚本用于在启动时设置 cronjob(在后台启动 Picard)?

Bash 安装程序脚本用于在启动时设置 cronjob(在后台启动 Picard)?

语境

假设有人想要一个名为的 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"

我还没有弄清楚如何在后台运行它。

相关内容