多目的スクリプトから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ジョブは2つのことを行います。

  1. すべてのサイトディレクトリとすべてのSQLを毎日2つの異なるディレクトリにバックアップします。 1 つは ~/backups/files、もう 1 つは ~/backups/sql です。
  2. 30日前に作成されたファイルを見つけて削除します。 --- 毎日新しく作成されます。

ベストアンサー1

cronつまり、使用に関するIpor Sircerの答えに基づいています。

人間のクローンタブ:

   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 -

おすすめ記事