たまにcron使おうとすると、注意事項をしょっちゅう忘れてしまうので、自分用にメモ。なんか他にも色々あったような気がするがとりあえず思いついただけを。
実行ユーザーと環境変数
実行ユーザーはcrontabを実行して編集したユーザー。管理者権限がほしい場合は、sudoでcrontabを編集する。
環境変数を以下のようにして調べる。
* * * * * /bin/env > ~/env.txt
~が使える。で、結果は以下。
XDG_SESSION_ID=43440
SHELL=/bin/sh
USER=hoge
PATH=/usr/bin:/bin
PWD=/home/blog
LANG=en_US.UTF-8
SHLVL=1
HOME=/home/hoge
LOGNAME=hoge
XDG_RUNTIME_DIR=/run/user/1000
_=/bin/env
これらの環境変数が使えるわけだが、これでは困るケースも多々ある。
もっとも簡単なやり方は、crontabに直接 VAR=hogehoge の形で書き込んでしまうことだろう。ただいちいち記述するのも面倒だし、APIのKEYなどは抵抗があるしで、私はsourceコマンドで環境変数を記述したファイルを読み込んでからコマンド実行することが多い。
その他、bashでは-lオプションを使うとログインシェルとして実行できるので、
* * * * * /usr/bin/bash -l -c 'cmd'
などとすることもできる。個人で管理しているVPSなんかならこれでも十分と思う。
参考サイト
ファイルの置き場所
crontabのファイルは/var/spool/cron/下にユーザー名で置いてある。普通はcrontab -lで見るので使わないと思うが。
他、/etc/cron.d/や/etc/cron.daily/下にスクリプトを置くと、管理者権限でよしなに実行してくれる。
参考サイト
dateの%
cronではdateコマンドを実行することもよくあるが、dateコマンドで使う%にはエスケープシーケンスをつける必要がある。
* * * * * echo hoge > ~/$(date +\%Y\%m\%d).txt
こんな感じ。
関連記事
シェルスクリプト の記事
- [2023年3月21日] bashでフォルダ内にある横長の画像フォルダだけ移動する
- [2023年3月19日] 同じディレクトリにpngファイルと拡張子以外が同じjpgを検出・削除する
- ---本記事---
- [2018年1月10日] 一括で複数の画像ファイルを余白つけて正方形にする
- [2017年12月18日] bashでスクレイピングする時のメモ
- [2017年3月22日] Macでカレントディレクトリ内のpngを一括でjpgに変換する(逆も同じ)
- [2017年1月16日] Octaveの使い方、基本事項
- [2017年1月16日] Octaveで反比例の二次元グラフを描画
- [2016年5月9日] Macで複数のpngファイルをpdfに変換する
- [2016年2月23日] SC2029: Note that, unescaped, this expands on the client side. について
- [2016年2月17日] shellcheck で ls | grep が怒られた…ls の出力をパースしてはいけない?
スポンサーリンク