是否可以从多用途脚本写入 crontab?

是否可以从多用途脚本写入 crontab?

当我想操纵 Unix cron 时,我会这样做

crontab -e

然后输入(或粘贴)我的指令。

如何将指令粘贴到 crontab直接从脚本

换句话说:我不想将内容粘贴到 crontab -e 内,而是想从外部粘贴并保存它,从脚本中准备好,以便使事情自动化。

我问这个问题是关于我每次创建新的 VPS 环境(例如,新的 Digital Ocean Droplet)时运行的多用途脚本。


我可以输入文件通过,例如:

sudo bash -c "touch /location/new_file && echo 'text...text...text...text' > /location/new_file

或者:

sudo cat <<EOF >> /location/new_file
text...
text...
text...
text...
EOF

然而,我不知道是否可以从脚本直接写入 Crontab,以及如何写入。

这是我想要粘贴到 Cron 选项卡中的任务 --- 来自脚本:

0 8 * * *  tar -zcvf /home/USER/backups/files/www-html-$(date +\%F-\%T-).tar.gz /var/www/html
0 8 * * *  find /home/USER/backups/files/* -mtime +30 -exec rm {} \;

0 8 * * *  mysqldump -u benia -p121212 --all-databases > /home/USER/backups/mysql/alldb_backup.sql
1 8 * * *  tar -zcvf /home/USER/backups/mysql/alldb_backup-$(date +\%F-\%T-).sql.tar.gz /home/USER/backups/mysql/alldb_backup.sql
2 8 * * *  rm /home/USER/backups/mysql/alldb_backup.sql
2 8 * * *  find /home/USER/backups/mysql/* -mtime +30 -exec rm {} \;

笔记:

上面的 cron 任务做了两件事:

  1. 每日备份所有站点目录和所有 sql,到 2 个不同的目录中:一个是 ~/backups/files,一个是 ~/backups/sql
  2. 查找并删除 30 天前创建的文件 --- 每天都是新的。

答案1

根据 Ipor Sircer 关于 的使用的回答cron,即

人 crontab:

   crontab [ -u user ] file

   The  first  form  of this command is used to install a new crontab from
   some named file or standard  input  if  the  pseudo-filename  ``-''  is
   given.

这意味着您发送线你想要在你的 crontab 文件中,到这个命令的标准输入:

crontab -

crontab将重新创建一个包含这些命令的新 cron 文件。

  1. 该脚本将首先使用 打印现有的 crontab crontab -u $user -l 2>/dev/null
    您将需要将用户的值分配给$user或使用($USER如果它在您的环境中)。

  2. 它将打印您想要的新行并将聚合结果捕获到连接到 的 stdin 的管道中crontab -


它在通用脚本中应如下所示:

#!/bin/bash

user=YOU_NEED_TO_ENTER_YOUR_USER_HERE

# use a subshell to capture both commands output into the pipe (    # prints the current value of crontab
    crontab -u $user -l 2>/dev/null

    # print your cron jobs to STDOUT    
    cat <<- 'EOF'
        0 8 * * *  tar -zcvf /home/USERNAME/backups/files/www-html-$(date +\%F-\%T-).tar.gz /var/www/html
        0 8 * * *  find /home/USERNAME/backups/files/* -mtime +30 -exec rm {} \;

        0 8 * * *  mysqldump -u benia -p121212 --all-databases > /home/USERNAME/backups/mysql/alldb_backup.sql
        1 8 * * *  tar -zcvf /home/USERNAME/backups/mysql/alldb_backup-$(date +\%F-\%T-).sql.tar.gz /home/USERNAME/backups/mysql/alldb_backup.sql
        2 8 * * *  rm /home/USERNAME/backups/mysql/alldb_backup.sql
        2 8 * * *  find /home/USERNAME/backups/mysql/* -mtime +30 -exec rm {} \;
    EOF

# Everything printed to stdout - inside the subshell will be connected
# to the pipe and feed to crontab on stdin - recreating a new crontab ) | crontab -

答案2

人 crontab:

   crontab [ -u user ] file

   The  first  form  of this command is used to install a new crontab from
   some named file or standard  input  if  the  pseudo-filename  ``-''  is
   given.

相关内容