crontabで管理者ユーザーアカウント名を保持する変数をどのように宣言して使用しますか?

crontabで管理者ユーザーアカウント名を保持する変数をどのように宣言して使用しますか?

私はcrontabがroot不可知論的であることを望みます。つまり、文字通り管理ユーザーを指定したくありませんjim。これが私のcrontabにroot変数が導入された理由ですau

SHELL=/bin/bash

PATH=/usr/bin:/bin:/usr/sbin:/sbin

au=$(echo "$(head -n 1 /etc/doas.conf)"|sed 's/permit//;s/as//;s/root//;s/ //g')

5 */4 * * * /home/"${au}"/sync-w-oumaima.sh
* * * * * echo "$au">"/home/${au}/${au}.log"

残念ながら動作しません。/home/jim/jim.logcrontabで作成されていません。 crontabで管理者ユーザーアカウント名を保持する変数をどのように宣言して使用しますか?

ベストアンサー1

このcrontab形式を使用すると、環境変数を定義できますが、置換は実行されません。あなたの例では、au変数は次のように定義されます。ひも $(echo "$(head -n 1 /etc/doas.conf)"|sed 's/permit//;s/as//;s/root//;s/ //g')

最も簡単な解決策は、crontabでユーザーを明示的に定義することです。

SHELL=/bin/bash

PATH=/usr/bin:/bin:/usr/sbin:/sbin

au=jim

5 */4 * * * /home/"${au}"/sync-w-oumaima.sh
* * * * * echo "$au">"/home/${au}/${au}.log"

au別の解決策は、変数を設定し、「実際の」コマンドを実行し、crontabでスクリプトを実行する簡単なスクリプトを作成することです。

#!/bin/bash
export au=$(echo "$(head -n 1 /etc/doas.conf)"|sed 's/permit//;s/as//;s/root//;s/ //g')
/home/"${au}"/sync-w-oumaima.sh

3番目の解決策は、シェル組み込みを使用してシェルに変数evalau内容を再解釈させることです。たとえば、次のようになります。

SHELL=/bin/bash

PATH=/usr/bin:/bin:/usr/sbin:/sbin

au=$(echo "$(head -n 1 /etc/doas.conf)"|sed 's/permit//;s/as//;s/root//;s/ //g')

5 */4 * * * eval /home/"${au}"/sync-w-oumaima.sh
* * * * * eval echo "$au" \> "/home/${au}/${au}.log"

しかし、あなたはそうしなければなりません。追加必要な脱出に注意してください(私は確かにそうではありませんでした)。

おすすめ記事