cronでありがちな罠
cronでありがちな罠
仕事や趣味でcronを使ったときにありがちな罠をまとめてみた
cronの設定方法がよくわからん
- 一般ユーザーでcronを設定するときはcrontab -eすればいいeはeditのe
- 有名な罠だがcrontab -rすると設定済みのcronが消えるのでやらないこと
cronの書き方がぱっとわからない
- /etc/crontabを見るとサンプルがあるので見るとわかりやすい。crontab上で環境変数を設定できる。
- SHELL:cronが実行されるときに読まれるシェルを指定できる、まあbashから変えることないけど
- PATH:cronが実行されるときに設定されるPATHが指定できる、PATHだけ設定したいならばPATH=$PATH:/opt/your/desired/pathとか設定すればいいのでは
- MAILTO:cronが実行されたときに結果が通知されるメールアドレスを指定できる、Linux上のユーザー名を指定できるしpostfixなどが動いていれば外部のメールアドレスなども指定できる。ちなみにカンマ区切りで複数指定できる。
- 肝心の時刻設定はcrontab.guruなどでcronの記法を試せるサイトがあるので、実際に適当に書いてみて試せばわかりやすい
Crontab.guru - The cron schedule expression editor
$ sudo cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed
xenv系(pyenv, rbenv)のパスが通ってないのでcronが実行できない
- cronの実行時にsource ~/.bashrcしてやればとりあえず動く
cronの結果ログが見れない
- 例えばcrontabの設定でMAILTOに何も設定していない場合「新しいメールが /var/spool/mail/{ユーザー名} にあります」とかメールが来る
- そいつをmail -f /var/spool/mail/{ユーザー名}して読めば、中に標準出力が出ており確認できる
mailコマンドの使い方はググってください
cron上で%を文字列に使うとエラーで落ちる
リンク先の解説が詳しいが、「%」は「\%」にしてエスケープしないと動かない
tech.mktime.com
Debian10でVirtualBoxが動かないのでvirt-managerを使い始めた
Debian10でVirtualBoxが動かないのでvirt-managerを使い始めた。
Packages for VirtualBox are not available in Debian 10 and won't be in buster-backports either. A recommended alternative is Virtual Machine Manager (buster/virt-manager). See also this link that explains some useful basics for qemu
あれ?Debian10ではVirtualBox使えない(かメンテされてない)みたい。道理で起動しないわけだ。代替としてvirt-managerがあるらしい。
インストールは
$ sudo apt-get install virt-manager
するだけ
試しにUbuntu20をインストールしてみたらうまく動いている。Qemuベースなのかな?
HDDからディスク容量の小さいSSDに移行した
メインPCのCPUをRyzen 5 3600に移行した話の続き
nantonaku-shiawase.hatenablog.com
- 「SSD 660p Series SSDPEKNW512G8XT」とかいう超速いSSDを入手したが、元のHDDのブートディスクが2TBデータを持っているのに対してSSDは512GBしかない
- どうやってデータ移行して起動できるようにするかという話
gpartedでefi用の領域を用意する
以降、SSDのデバイス名を「/dev/nvme0n1」として記載
- GPTのエントリを書き込む
$ sudo gdisk /dev/nvme0n1 w
容量200MB程度
Partition Name:『ESP』
基本パーティション
ラベル:『ESP』
ファイルシステム:『FAT32』
applyしたあと、作られた領域を右クリックして、『フラグを編集』をクリック。
- 『boot』
- 『esp』
の二つにチェックマークを付る
上記で2つのパーティションができる。以降、efi用の領域を「/dev/nvme0n1p1」、データ用の領域を「/dev/nvme0n1p2」として手順を記載する。
rsyncでデータ用の領域を同期
// コピー先SSD $ sudo mkdir /mnt/ssd $ sudo mount /dev/nvme0n1p2 /mnt/ssd // コピー元HDD $ sudo mkdir /mnt/hdd $ sudo mount /dev/sda1 /mnt/hdd // rsyncドライラン $ sudo rsync -avr --owner --group --dry-run /mnt/hdd /mnt/ssd // rsync実行(全体の進捗を出す、圧縮させると重いので-zはつけない) $ sudo rsync -ar --info=progress2 --owner --group /mnt/hdd/ /mnt/ssd/
grubのインストール
grubをインストールする
// grub2の準備 $ sudo apt-get install grub-efi-amd64-bin // chrootする(rootで実行していく) $ sudo su // データ用の領域をマウントする # mkdir /chroot # mount /dev/nvme0n1p2 /chroot // プログラム実行に必要なものをbind # mount --bind /dev /chroot/dev # mount --bind /dev/pts /chroot/dev/pts # mount --bind /proc /chroot/proc # mount --bind /sys /chroot/sys # mount --bind /run /chroot/run # chroot /chroot
// 無ければ /boot/efi は作っておく # mkdir -p /boot/efi # mount /dev/nvme0n1p1 /boot/efi
空のEFI領域にブートプログラムであるところのgrubをインストール
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --recheck # ls -l /boot/efi/EFI/debian/ 合計 5202 -rwxr-xr-x 1 root root 108 2月 27 00:40 BOOTX64.CSV -rwxr-xr-x 1 root root 1206824 2月 27 00:40 fbx64.efi -rwxr-xr-x 1 root root 117 2月 27 00:40 grub.cfg -rwxr-xr-x 1 root root 1533296 2月 27 00:40 grubx64.efi -rwxr-xr-x 1 root root 1261192 2月 27 00:40 mmx64.efi -rwxr-xr-x 1 root root 1322936 2月 27 00:40 shimx64.efi
/etc/fstabの編集
- /etc/fstabを以下のように編集し、再起動
- 起動するディスクはefiをインストールしたやつにする
- 事前にsudo blkid /dev/nvme0n1p1, sudo blkid /dev/nvme0n1p2 しておきPARTUUIDを記録しておく
$ sudo cat /etc/fstab # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> PARTUUID=6e1ae4f9-bf29-4d76-a1b5-bfed57c80ee1 /boot/efi vfat errors=remount-ro 0 2 PARTUUID=ac09284a-8f98-46e0-a613-04f2b5621055 / ext4 errors=remount-ro 0 1
くぅ~疲れましたw これにて完結です!