なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

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

Slackのメッセージを一括削除したいのでslack-cleaner2を使った話

Slackのメッセージを消したいのでslack-cleaner2を使った話

動機

  • Slackのbotなどを使っており、テストでbotが作ったメッセージを消したい
  • slack-cleanerを使ってメッセージ削除しようとしたらAPI変更とかの影響で削除できない

リポジトリ
github.com

Slack側の設定手順

https://github.com/sgratzl/slack_cleaner2#user-token-scopes-by-use-case

すると以下のように見えるはず

  • user oauth tokenとbot oauth tokenがあるのだが、普段botとして稼働させる方にはbotトークンを使用して、管理用のトークンにuser oauth tokenを使えばいいのではと思った

f:id:panzer-jagdironscrap1:20210327100744p:plain

インストール手順

$ python --version
Python 3.6.10
$ pip install slack-cleaner2

メッセージの削除

  • SlackCleanerのインスタンストークンを食わせると動作する。足りない権限があればメッセージが出る。
$ python
Python 3.6.10 (default, Aug 22 2020, 00:49:22) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from slack_cleaner2 import *
>>> 

// トークンを設定
>>> s = SlackCleaner('xoxp-***')
>>> 
>>> s.users
ワークスペースのユーザーを全て出す
[xxx, xxx...]

>>> [msg for msg in s.c['YOUR CHANNEL NAME'].msgs(with_replies=True)]
チャンネルのメッセージを全て出す

>>> for msg in s.c['YOUR CHANNEL NAME'].msgs(with_replies=True):
...   msg.delete()
... 
チャンネルのメッセージを全部消す
..........

素晴らしい

Debian10でVirtualBoxが動かないのでvirt-managerを使い始めた

Debian10でVirtualBoxが動かないのでvirt-managerを使い始めた。

wiki.debian.org

DebianWikiページによると

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があるらしい。

packages.debian.org

インストールは

$ sudo apt-get install virt-manager

するだけ

試しにUbuntu20をインストールしてみたらうまく動いている。Qemuベースなのかな?

f:id:panzer-jagdironscrap1:20210305233336p:plain