Closed tsurugi-TakaChan closed 6 years ago
scp でぶっこ抜いて git add cron.* crontab
して git diff で差分を見た
diff --git a/problems/53/etc/cron.d/.placeholder b/problems/53/etc/cron.d/.placeholder
deleted file mode 100644
index 76cb8d0..0000000
--- a/problems/53/etc/cron.d/.placeholder
+++ /dev/null
@@ -1,2 +0,0 @@
-# DO NOT EDIT OR REMOVE
-# This file is a simple placeholder to keep dpkg from removing this directory
diff --git a/problems/53/etc/cron.d/0hourly b/problems/53/etc/cron.d/0hourly
new file mode 100644
index 0000000..1ab8c17
--- /dev/null
+++ b/problems/53/etc/cron.d/0hourly
@@ -0,0 +1,5 @@
+# Run the hourly jobs
+SHELL=/bin/bash
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+MAILTO=root
+01 * * * * root run-parts /etc/cron.hourly
diff --git a/problems/53/etc/cron.d/sysstat b/problems/53/etc/cron.d/sysstat
deleted file mode 100644
index 66325ce..0000000
--- a/problems/53/etc/cron.d/sysstat
+++ /dev/null
@@ -1,9 +0,0 @@
-# The first element of the path is a directory where the debian-sa1
-# script is located
-PATH=/usr/lib/sysstat:/usr/sbin:/usr/sbin:/usr/bin:/sbin:/bin
-
-# Activity reports every 10 minutes everyday
-5-55/10 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1
-
-# Additional run at 23:59 to rotate the statistics file
-59 23 * * * root command -v debian-sa1 > /dev/null && debian-sa1 60 2
diff --git a/problems/53/etc/cron.daily/.placeholder b/problems/53/etc/cron.daily/.placeholder
deleted file mode 100644
index 76cb8d0..0000000
--- a/problems/53/etc/cron.daily/.placeholder
+++ /dev/null
@@ -1,2 +0,0 @@
-# DO NOT EDIT OR REMOVE
-# This file is a simple placeholder to keep dpkg from removing this directory
diff --git a/problems/53/etc/cron.daily/apt-compat b/problems/53/etc/cron.daily/apt-compat
deleted file mode 100755
index 095a44c..0000000
--- a/problems/53/etc/cron.daily/apt-compat
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/bin/sh
-
-set -e
-
-# Systemd systems use a systemd timer unit which is preferable to
-# run. We want to randomize the apt update and unattended-upgrade
-# runs as much as possible to avoid hitting the mirrors all at the
-# same time. The systemd time is better at this than the fixed
-# cron.daily time
-if [ -d /run/systemd/system ]; then
- exit 0
-fi
-
-check_power()
-{
- # laptop check, on_ac_power returns:
- # 0 (true) System is on main power
- # 1 (false) System is not on main power
- # 255 (false) Power status could not be determined
- # Desktop systems always return 255 it seems
- if which on_ac_power >/dev/null 2>&1; then
- on_ac_power
- POWER=$?
- if [ $POWER -eq 1 ]; then
- return 1
- fi
- fi
- return 0
-}
-
-# sleep for a random interval of time (default 30min)
-# (some code taken from cron-apt, thanks)
-random_sleep()
-{
- RandomSleep=1800
- eval $(apt-config shell RandomSleep APT::Periodic::RandomSleep)
- if [ $RandomSleep -eq 0 ]; then
- return
- fi
- if [ -z "$RANDOM" ] ; then
- # A fix for shells that do not have this bash feature.
- RANDOM=$(( $(dd if=/dev/urandom bs=2 count=1 2> /dev/null | cksum | cut -d' ' -f1) % 32767 ))
- fi
- TIME=$(($RANDOM % $RandomSleep))
- sleep $TIME
-}
-
-# delay the job execution by a random amount of time
-random_sleep
-
-# ensure we don't do this on battery
-check_power || exit 0
-
-# run daily job
-exec /usr/lib/apt/apt.systemd.daily
diff --git a/problems/53/etc/cron.daily/aptitude b/problems/53/etc/cron.daily/aptitude
deleted file mode 100755
index d5953d9..0000000
--- a/problems/53/etc/cron.daily/aptitude
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-bak=/var/backups
-
-# Shamelessly ripped from /etc/cron.daily/standard
-if test -f /var/lib/aptitude/pkgstates && cd $bak ; then
- if ! cmp -s aptitude.pkgstates.0 /var/lib/aptitude/pkgstates ; then
- cp -p /var/lib/aptitude/pkgstates aptitude.pkgstates
- savelog -c 7 aptitude.pkgstates > /dev/null
- fi
-fi
diff --git a/problems/53/etc/cron.daily/bsdmainutils b/problems/53/etc/cron.daily/bsdmainutils
deleted file mode 100755
index e65cbd3..0000000
--- a/problems/53/etc/cron.daily/bsdmainutils
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-# /etc/cron.daily/calendar: BSD mainutils calendar daily maintenance script
-# Written by Austin Donnelly <and1000@debian.org>
-
-. /etc/default/bsdmainutils
-
-[ x$RUN_DAILY = xtrue ] || exit 0
-
-[ -x /usr/sbin/sendmail ] || exit 0
-
-if [ ! -x /usr/bin/cpp ]; then
- echo "The cpp package is needed to run calendar."
- exit 1
-fi
-
-/usr/bin/calendar -a
diff --git a/problems/53/etc/cron.daily/dpkg b/problems/53/etc/cron.daily/dpkg
deleted file mode 100755
index c0aefb8..0000000
--- a/problems/53/etc/cron.daily/dpkg
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/bin/sh
-
-dbdir=/var/lib/dpkg
-
-# Backup the 7 last versions of dpkg databases containing user data.
-if cd /var/backups ; then
- # We backup all relevant database files if any has changed, so that
- # the rotation number always contains an internally consistent set.
- dbchanged=no
- dbfiles="arch status diversions statoverride"
- for db in $dbfiles ; do
- if ! cmp -s dpkg.${db}.0 $dbdir/$db ; then
- dbchanged=yes
- break;
- fi
- done
- if [ "$dbchanged" = "yes" ] ; then
- for db in $dbfiles ; do
- [ -e $dbdir/$db ] || continue
- cp -p $dbdir/$db dpkg.$db
- savelog -c 7 dpkg.$db >/dev/null
- done
- fi
-
- # The alternatives database is independent from the dpkg database.
- dbalt=alternatives
-
- # Switch the alternatives database backups from xz to gzip, as the latter
- # is Essential and we can rely on it being always present, using xz here
- # is not worth the trouble, disk space savings, or possible additional
- # dependencies.
- for dbseq in `seq 1 6` ; do
- dbfile=${dbalt}.tar.${dbseq}
- [ -e "${dbfile}.xz" ] || continue
- unxz ${dbfile}.xz
- gzip -9 $dbfile
- done
-
- # XXX: Ideally we'd use --warning=none instead of discarding stderr, but
- # as of GNU tar 1.27.1, it does not seem to work reliably (see #749307).
- if ! test -e ${dbalt}.tar.0 ||
- ! tar -df ${dbalt}.tar.0 -C $dbdir $dbalt >/dev/null 2>&1 ;
- then
- tar -cf ${dbalt}.tar -C $dbdir $dbalt >/dev/null 2>&1
- savelog -c 7 ${dbalt}.tar >/dev/null
- fi
-fi
diff --git a/problems/53/etc/cron.daily/logrotate b/problems/53/etc/cron.daily/logrotate
deleted file mode 100755
index f4f56a9..0000000
--- a/problems/53/etc/cron.daily/logrotate
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-
-test -x /usr/sbin/logrotate || exit 0
-/usr/sbin/logrotate /etc/logrotate.conf
diff --git a/problems/53/etc/cron.daily/man-db.cron b/problems/53/etc/cron.daily/man-db.cron
new file mode 100755
index 0000000..6e95c16
--- /dev/null
+++ b/problems/53/etc/cron.daily/man-db.cron
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+if [ -e /etc/sysconfig/man-db ]; then
+ . /etc/sysconfig/man-db
+fi
+
+if [ "$CRON" = "no" ]; then
+ exit 0
+fi
+
+renice +19 -p $$ >/dev/null 2>&1
+ionice -c3 -p $$ >/dev/null 2>&1
+
+LOCKFILE=/var/lock/man-db.lock
+
+# the lockfile is not meant to be perfect, it's just in case the
+# two man-db cron scripts get run close to each other to keep
+# them from stepping on each other's toes. The worst that will
+# happen is that they will temporarily corrupt the database
+[[ -f $LOCKFILE ]] && exit 0
+
+trap "{ rm -f $LOCKFILE ; exit 0; }" EXIT
+touch $LOCKFILE
+# create/update the mandb database
+mandb $OPTS
+
+exit 0
diff --git a/problems/53/etc/cron.daily/ntp b/problems/53/etc/cron.daily/ntp
deleted file mode 100755
index 8b85d0e..0000000
--- a/problems/53/etc/cron.daily/ntp
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/sh
-
-# The default Debian ntp.conf enables logging of various statistics to
-# the /var/log/ntpstats directory. The daemon automatically changes
-# to a new datestamped set of files at midnight, so all we need to do
-# is delete old ones, and compress the ones we're keeping so disk
-# usage is controlled.
-
-statsdir=$(cat /etc/ntp.conf | grep -v '^#' | sed -nr 's/^statsdir[[:space:]]+([^[:space:]]+).*$/\1/p')
-
-if [ -n "$statsdir" ] && [ -d "$statsdir" ]; then
- # only keep a week's depth of these. Delete only files exactly
- # within the directory and do not descend into subdirectories
- # to avoid security risks on platforms where find is not using
- # fts-library.
- find "$statsdir" -maxdepth 1 -type f -mtime +7 -delete
-
- # compress whatever is left to save space but make sure to really
- # do it only in the expected directory.
- cd "$statsdir" || exit 1
- ls -d -- *stats.???????? > /dev/null 2>&1
- if [ $? -eq 0 ]; then
- # Note that gzip won't compress the file names that
- # are hard links to the live/current files, so this
- # compresses yesterday and previous, leaving the live
- # log alone. We supress the warnings gzip issues
- # about not compressing the linked file.
- gzip --best --quiet -- *stats.????????
- return=$?
- case $return in
- 2)
- exit 0 # squash all warnings
- ;;
- *)
- exit $return # but let real errors through
- ;;
- esac
- fi
-fi
diff --git a/problems/53/etc/cron.daily/passwd b/problems/53/etc/cron.daily/passwd
deleted file mode 100755
index 4778bf0..0000000
--- a/problems/53/etc/cron.daily/passwd
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-
-cd /var/backups || exit 0
-
-for FILE in passwd group shadow gshadow; do
- test -f /etc/$FILE || continue
- cmp -s $FILE.bak /etc/$FILE && continue
- cp -p /etc/$FILE $FILE.bak && chmod 600 $FILE.bak
-done
diff --git a/problems/53/etc/cron.daily/sysstat b/problems/53/etc/cron.daily/sysstat
deleted file mode 100755
index 7c7a5df..0000000
--- a/problems/53/etc/cron.daily/sysstat
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/sh
-# Generate a daily summary of process accounting. Since this will probably
-# get kicked off in the morning, it is run against the previous day data.
-
-# our configuration file
-DEFAULT=/etc/default/sysstat
-# default settings, overriden in the above file
-ENABLED=false
-
-[ ! -x /usr/lib/sysstat/sa2 ] && exit 0
-
-# read our config
-[ -r "$DEFAULT" ] && . "$DEFAULT"
-
-[ "$ENABLED" = "true" ] || exit 0
-
-exec /usr/lib/sysstat/sa2 -A
-
diff --git a/problems/53/etc/cron.hourly/.placeholder b/problems/53/etc/cron.hourly/.placeholder
deleted file mode 100644
index 76cb8d0..0000000
--- a/problems/53/etc/cron.hourly/.placeholder
+++ /dev/null
@@ -1,2 +0,0 @@
-# DO NOT EDIT OR REMOVE
-# This file is a simple placeholder to keep dpkg from removing this directory
diff --git a/problems/53/etc/cron.hourly/0anacron b/problems/53/etc/cron.hourly/0anacron
new file mode 100755
index 0000000..7bcb684
--- /dev/null
+++ b/problems/53/etc/cron.hourly/0anacron
@@ -0,0 +1,17 @@
+#!/bin/sh
+# Check whether 0anacron was run today already
+if test -r /var/spool/anacron/cron.daily; then
+ day=`cat /var/spool/anacron/cron.daily`
+fi
+if [ `date +%Y%m%d` = "$day" ]; then
+ exit 0;
+fi
+
+# Do not run jobs when on battery power
+if test -x /usr/bin/on_ac_power; then
+ /usr/bin/on_ac_power >/dev/null 2>&1
+ if test $? -eq 1; then
+ exit 0
+ fi
+fi
+/usr/sbin/anacron -s
diff --git a/problems/53/etc/cron.minutely/crawler.sh b/problems/53/etc/cron.minutely/crawler.sh
index 0dc2675..659fd52 100755
--- a/problems/53/etc/cron.minutely/crawler.sh
+++ b/problems/53/etc/cron.minutely/crawler.sh
@@ -1 +1 @@
-python3 /opt/crawler/crawl.py
+/opt/crawler/venv/bin/python3 /opt/crawler/crawl.py
diff --git a/problems/53/etc/cron.monthly/.placeholder b/problems/53/etc/cron.monthly/.placeholder
deleted file mode 100644
index 76cb8d0..0000000
--- a/problems/53/etc/cron.monthly/.placeholder
+++ /dev/null
@@ -1,2 +0,0 @@
-# DO NOT EDIT OR REMOVE
-# This file is a simple placeholder to keep dpkg from removing this directory
diff --git a/problems/53/etc/cron.weekly/.placeholder b/problems/53/etc/cron.weekly/.placeholder
deleted file mode 100644
index 76cb8d0..0000000
--- a/problems/53/etc/cron.weekly/.placeholder
+++ /dev/null
@@ -1,2 +0,0 @@
-# DO NOT EDIT OR REMOVE
-# This file is a simple placeholder to keep dpkg from removing this directory
diff --git a/problems/53/etc/crontab b/problems/53/etc/crontab
index 95edd9b..c380767 100644
--- a/problems/53/etc/crontab
+++ b/problems/53/etc/crontab
@@ -1,15 +1,15 @@
-# /etc/crontab: system-wide crontab
-# Unlike any other crontab you don't have to run the `crontab'
-# command to install the new version when you edit this file
-# and files in /etc/cron.d. These files also have username fields,
-# that none of the other crontabs do.
+SHELL=/bin/bash
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+MAILTO=root
-SHELL=/bin/sh
-PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+# 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
-# m h dom mon dow user command
-17 * * * * root cd / && run-parts --report /etc/cron.hourly
-25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
-47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
-52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
-#
古いサーバーにしかないファイル
新しいサーバーにしかないファイル
差分のあるファイル
diff --git a/problems/53/etc/cron.d/0hourly b/problems/53/etc/cron.d/0hourly new file mode 100644 index 0000000..1ab8c17 --- /dev/null +++ b/problems/53/etc/cron.d/0hourly @@ -0,0 +1,5 @@ +SHELL=/bin/bash +PATH=/sbin:/bin:/usr/sbin:/usr/bin +MAILTO=root +01 root run-parts /etc/cron.hourly
-59 23 * root command -v debian-sa1 > /dev/null && debian-sa1 60 2
+PATH= /sbin : /bin :/usr/sbin : /usr/bin -PATH= /usr/lib/sysstat : /usr/sbin : /usr/sbin : /usr/bin : /sbin : /bin
/usr/sbin が2つあったが一つ消えた。/usr/lib/sysstat が消された。
+SHELL=/bin/bash +MAILTO=root +01 root run-parts /etc/cron.hourly
-5-55/10 root command -v debian-sa1 > /dev/null && debian-sa1 1 1 -59 23 * root command -v debian-sa1 > /dev/null && debian-sa1 60 2
diff --git a/problems/53/etc/crontab b/problems/53/etc/crontab index 95edd9b..c380767 100644 --- a/problems/53/etc/crontab +++ b/problems/53/etc/crontab @@ -1,15 +1,15 @@ +SHELL=/bin/bash +PATH=/sbin:/bin:/usr/sbin:/usr/bin +MAILTO=root
-SHELL=/bin/sh -PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
SHELLが/bin/shから/bin/bashへ移動 PATHが/usr/local/sbin:/usr/local/binが消えた
run-parts コマンドの扱いがディストリによって違うとかいう記事を見かけたからOSのバージョン調べたほうがいいかも
前のサーバーのログから見られる規則性。
* * * * * 毎分ごとに実行文
1 * * * * 11分に1時間おきに実行文
46 3 * * * 毎日3時46分に実行文
11 5 * * * 毎日5時11分に実行文
古い方のサーバーのOS情報
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
新しい方のサーバーのOS情報
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
cat: .: Is a directory
新しいサーバーでは/etc/cron.minutely/にあるファイル全部フォーマットエラーが出ている。
1./etc/cron.minutely/crawler.sh
1-1.名前から " . " を削除して改名をする。(名前に制限があるため)
1-2. python3 /opt/crawler/crawl.py
新しいサーバーに/opt/crawlerというディレクトリーがないため、作成してから入れる。
2./etc/cron.minutely/delete.sh
2-1.名前から " . " を削除して改名をする。(名前に制限があるため)
2-2./usr/bin/find / \( -name ".DS_Store" -or -name "._*" \) -print -exec rm {} “;"
↑この書式だと動かないので、
/usr/bin/find / \( -name ".DS_Store" -or -name "._*" \) -print -exec rm {} \;に変更
すればよい。
3./etc.cron.minutely/package-update
3.1 yum update -y
yumコマンドで更新している。バージョンが違うためインストールできず、同じ動きをするように書き変え
る必要がある。→apt-get updateに変更
yum update -y
ubuntu の同じ機能は
apt-get update
です!!!
お疲れ様です。team10 の kstm です。
旧サーバで実行されているcronに登録されているスクリプトが新サーバで実行されないというトラブルについて、二つのサーバーのOS情報を調べたら以下の情報が出てきました。
cron.minutesを実行
古いサーバーのOS情報
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
新しいサーバーのOS情報
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
cat: .: Is a directory
以上より、cronに登録されているスクリプトが新サーバで実行されない原因はOSの違いではないかと予想しました。
cron.
お疲れ様です。team10 の kstm です。
OSについてを調べたのですが、以下のようになりました。 古いサーバーのOS情報
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
新しいサーバーのOS情報
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
cat: .: Is a directory
OSが違うことが確認できます。
新しいサーバーでcron
ファイルを実行してみたら、 cron.minutely
でエラーが起きていたので、 cron.minutely
にある3つのファイルを実行できるように以下の変更をしました。
/etc/cron.minutely/crawler.sh'
debian
ではファイル名に " . "
使用できないため、crawler.sh
を crawlersh
に改名しました。'#!/bin/sh'
を一行目に入れました。opt
にファイルを crawler
というファイルを作成し、古いサーバーから crawl.py
を入れました。/etc/cron.minutely/delete.sh
debianではファイル名に
、 " . "
使用できないため、 delete.sh
を deletesh
に改名しました。#!/bin/sh
を一行目に入れました。/usr/bin/find / \( -name ".DS_Store" -or -name "._*" \) -print -exec rm {} “;"
を /usr/bin/find / \( -name ".DS_Store" -or -name "._*" \) -print -exec rm {} \;
に変更しました。/etc.cron.minutely/package-update
#!/bin/sh
を一行目に入れました。yum
コマンドがないので、内容を apt-get update
に変更しました。これでは動くようになりました。
以上、確認をお願いします。
今まで使っていたサーバが老朽化してしまったため、新しくサーバのマイグレーションを行うこととなった。 現在はそのマイグレーション前の移行作業中なのだが、cronで動作させていたスクリプトが実行されない。
そのため、新しいサーバでcronが正しく実行されるように設定の変更を行ってほしい。
スタート 旧サーバで実行されているcronに登録されているスクリプトが新サーバで実行されない
ゴール 新サーバにて、全てのcronに登録されているスクリプトが正常終了するようにする
情報