一定期間後に自動的に期限切れになる新しい Linux ユーザー アカウントを作成できる PHP アプリケーションを作成しました。
Googleで「修正後にLinuxユーザーを自動削除する方法」を検索したところ、この答えが見つかりました。https://unix.stackexchange.com/a/80971/224583
しかし、たとえば新しいアカウントを作成して、10 か月後、または 5 か月後に期限切れにする方法がわかりません。
私の質問は、月を日に変換する方法です。たとえば、5 か月を指定して、5 か月の日数を変換します。または、私の質問以外の解決策はありますか?
答え1
ユーティリティの有効期限オプションには、useradd
の形式で日付を指定する必要がありますYYYY-MM-DD
。
-d
コマンドのオプションを使用してその日付を計算できますdate
。5 か月のシナリオの例を使用します。
$ date +"%Y-%m-%d"
2017-04-08
$ date -d "5 months" +"%Y-%m-%d"
2017-09-08
答え2
のスイッチ-e
は、マニュアルページに記載されているように、useradd
国際日付形式 ( ) の日付を想定しています。YYYY-MM-DD
-e, --expiredate EXPIRE_DATE
The date on which the user account will be disabled. The date is
specified in the format YYYY-MM-DD.
[...]
これで、アカウントの有効期限が切れる予定日を指定するだけで済みます。この計算は PHP で実行できます。リンク先の回答では、標準のコマンド ライン ツールを使用して計算が実行されるため、高水準言語を使用する必要はありません。
PHP でこれを行う方法の例コードは次のとおりです。
$diffHour = 0;
$diffMinute = 0;
$diffSecond = 0;
$diffMonth = 10;
$diffDay = 0;
$diffYear = 0;
$hour = date("H") + $diffHour;
$minute = date("i") + $diffMinute;
$second = date("s") + $diffSecond;
$month = date("n") + $diffMonth;
$day = date("j") + $diffDay;
$year = date("Y") + $diffYear;
$time = mktime($hour, $minute, $second, $month, $day, $year);
$date = date("Y-m-d", $time);
一番上のブロックに変数を入力するだけです。10 か月の例では変数を入力しました。時間を遡ることもできます。たとえば、7 か月マイナス 4 日で期限切れにしたい場合は、$diffMonth = 7;
と を設定できます$diffDay = -4;
。
次に、日付の値 (2018-02-09
今日実行した場合 (ただし、アメリカに住んでいる場合は、タイムゾーンのある遅れた時間システムがまだ使用されているため、1 日早くなります)) を bash スクリプトに渡します。
bash コードの例:
useradd -e "2018-02-09" "rizal"