ν€μ€μ€ν¬ λͺ¨λ (24/7)μμ ν¬λ‘¬μ μ¬μ©νμ¬ Xμ μ¬μ©μ μ§μ μλ μμμ μ¬μ©νμΌλ©° λ€μμ μνν©λλ€. https://www.youtube.com/watch?v=P9Sk9bNrzeg
cron.daily ν΄λμ cronμ΄ λ§λ λ°±μ
(Google λλΌμ΄λΈμ)μ μ€μ νμ΅λλ€. μ€ν¬λ¦½νΈλ₯Ό μμ±νμ΅λλ€.
#!/bin/sh
G_USER_INPUT=0
/DietPi/dietpi/dietpi-backup 1 > /mnt/rpi/backup.log && tar zcfv /mnt/rpi/backup.tar.gz /mnt/backup/dietpi-backup/ >> /mnt/rpi/backup.log && rclone copy /mnt/rpi/backup.tar.gz dysk: -L >> /mnt/rpi/backup.log && rm -r /mnt/rpi/backup.tar.gz >> /mnt/rpi/backup.log && reboot
μ΄ μ€ν¬λ¦½νΈλ cron.dailyμμ μ€νλμμ λ DietPi λ²μ 6.9κΉμ§ μ μλνμ΅λλ€.
μλμΌλ‘ μ€νν λ μ€ν¬λ¦½νΈκ° μ μλν©λλ€.
v.6.10 λ° v.6.11λ‘ μ
λ°μ΄νΈ ν ν cron.dailyμμ μ€ν¬λ¦½νΈκ° μλνμ§ μμ§λ§ μλμΌλ‘ μμνλ©΄ μ λλ‘ μλν©λλ€.
backup.logμλ λ€μκ³Ό κ°μ λ¬Έμμ΄μ΄μλ μ΄ν΄ν μμλ λ¬Έμμ΄μ΄ μμ΅λλ€. μμΉ λ£¨νΈ μ‘μΈμ€λ₯Ό νμΈν©λλ€.
λν crontabμμ μμλμ§ μμ΅λλ€.
λΏ‘λΏ‘
μ κ³ ν΄ μ£Όμ
μ κ°μ¬ν©λλ€.
G_USER_INPUT=0
λ μ€μ λ‘ ν¬λ‘ μ€νμ μλμΌλ‘ κ°μ§λμ΄μΌνλ―λ‘ ν λΉ ν νμκ° μμ΅λλ€. κ·Έλ¬λ μν₯μ λ―ΈμΉλ €λ©΄ λ΄ λ³΄λ΄μΌν©λλ€. λ¬Όλ‘ μλν΄ λ³Ό κ°μΉκ° μμ΅λλ€.
export G_USER_INPUT=0
λΉλν ν μ€νμμ λμ λλΌμ΄λΈμμ (κ°κΉμ΄) μ¬μ 곡κ°μ΄ λΆμ‘±ν κ²½μ° μ€ν¬λ¦½νΈκ° μ’
λ£λ©λλ€ : https://github.com/Fourdee/DietPi/blob/master/dietpi/dietpi-backup#L456
κ·Έλ¬λ μλ μ€νμ΄ μ μλνλ€κ³ λ§ν©λκΉ? μ¬μ 곡κ°μ΄ λΆμ‘±ν κ²½μ° ν© ν
μΌ ν둬ννΈκ° νμλλ©΄ 무μνκ±°λ μ’
λ£ ν μ μμ΅λλ€.
λ‘κ·Έ νλͺ©μ λν΄ μΌλΆ μνΈν λ μμ μ½λ + checking for elevation root access
κ° μμλ©λλ€. μν:
cat /mnt/rpi/backup.log
μμ μ½λκ° νμ±νλμ΄ λ‘κ·Έ νμμ΄ μ§μ λ©λλ€. λν μ¬κΈ°μμ΄ μΆλ ₯μ μ 곡νμ¬ λ¬Έμ κ° λ°μν λ¨κ³λ₯Ό νμΈν μ μμ΅λλ€.
μλμΌλ‘ μ€νν λ μ€ν¬λ¦½νΈκ° μ μλν©λλ€.
μ΄μν.
ν¬λ‘ μμ
μ μ€ννκ³ λ‘κ·Έ κ²°κ³Όλ₯Ό λΆμ¬ λ£μΌμμμ€. /mnt/rpi/backup.log
NB : dietpi-backup
μλμΌλ‘ rsyncλ₯Ό λ‘κ·Έ νμΌ /var/log/dietpi-backup.log
λ‘ μΆλ ₯ν©λλ€. μ΄κ²λ μ¬μ©ν μ μμ΅λλ€.
κ·Έλμ λλ G_USER_INPUT = 0 (μ€ν¬λ¦½νΈμμ μ΄κ²μ μ κ±°νμ΅λλ€)μμ΄ cron μμ μ μ€ννλ €κ³ ν©λλ€.
/mnt/rpi/backup.logμ λ°±μ
λ‘κ·Έ νμΌ
[90m[[0m[33m......[90m][0m Checking for (elevated) root access[0m
dietpi-backup.logκ° λΉμ΄ μμ΅λλ€.
cronμ΄ μμλ νμλ νμ± νλ‘μΈμ€λ₯Ό λ³΄μ§ λͺ»νμ΅λλ€.
κ·Έλμ cron μμ ν νμΌμμ μΆλ ₯μ보기 μν΄ λ€λ₯Έ μ€ν¬λ¦½νΈλ₯Ό ν μ€νΈνκΈ° μν΄ μΆκ°νμ΅λλ€.
#!/bin/sh
echo 'Cron works!' > /mnt/rpi/cronworks.log
κ·Έλ¬λμ΄ μ€ν¬λ¦½νΈλ μμλμ§ μμμ΅λλ€. / mnt / rpi /μ "cronworks.log"νμΌμ΄ μμ΅λλ€.
λ΄ μ€ν¬λ¦½νΈμ μΆλ ₯ νμΌ (backup.log)μ΄ λ°±μ
(첫 λ²μ§Έ κ²μλ¬Όμμ)μ΄ μκΈ° λλ¬Έμ μ΄μνμ§λ§μ΄ κ°λ¨ν
λΏ‘λΏ‘
μ’μ΅λλ€. μ μ΄λ ν¬λ‘ μ μ€λ₯κ°μλ κ² κ°μ΅λλ€. cronμ run-parts /etc/cron.X/script
λ₯Ό ν΅ν΄ μ€ν¬λ¦½νΈλ₯Ό μμνλ©° λͺ κ°μ§ κ·μΉμ΄ μμ΅λλ€. μλ₯Ό λ€μ΄ μ€ν¬λ¦½νΈλ λ£¨νΈ (AFAIK)κ° μμ ν΄μΌνλ©° μ€ν¬λ¦½νΈμ νμΌ μλ©μ νμ©νμ§ μμμΌν©λλ€. μ¦, /etc/cron.daily/script.sh
μ 건λ λ°κ³ μ΄λ¦μ λμ /etc/cron.daily/script
μ΄μ΄μΌν©λλ€.
λν νμνμ§ μμ§λ§ DietPi μ€ν¬λ¦½νΈμ ν¨κ» μ¬μ©ν λλ #!/bin/bash
λ₯Ό shebangμΌλ‘ μ¬μ©νμμμ€. κ·Έλ€ μμ μ #!/bin/bash
λ₯Ό κ°μ§κ³ μμ§λ§ μμ μ μν΄ cron μ€ν¬λ¦½νΈ λ΄μμλ μ¬μ©νμμμ€.
μ€ν¬λ¦½νΈμ μ΄λ¦μ νμ "backup"(. sh μ μΈ)μ΄κ³ , μ€ν¬λ¦½νΈμμλ "#! / bin / sh"λ₯Ό "#! / bin / bash"λ‘ λ³κ²½νκ³ μ΄ μ€ν¬λ¦½νΈλ 루νΈκ° μμ ν©λλ€. λ§μ§λ§ κ²μλ¬Όμ λ΄ ββ"ν μ€νΈ"μ€ν¬λ¦½νΈλ μ§κΈ μλν©λλ€.
λλ λͺ¨λ κ²μ μλνμ§λ§ μ¬μ ν μλνμ§ μμ΅λλ€. ν μμ μ λ§μΉ ν λ‘κ·Έ νμΌλ‘ μΈμνλλ‘ μ€ν¬λ¦½νΈλ₯Ό λ³κ²½νκ³ μ€ν¬λ¦½νΈκ° μμλλ κ²μ 보μμ§λ§ tar, rclone λ±κ³Ό κ°μ λ€μ μμ μΌλ‘ μ΄λν μ μκΈ° λλ¬Έμ λ°±μ μ΄ μμλκ±°λ μλ£λμ§ μμμ΅λλ€ (dietpi-backup.logκ° λΉμ΄ μμ). λν cronμ μ€ν ν ν νλ‘μΈμ€ / usr / sbin / cron -f μλνκ³ -bash-μ μμ λκΉ?
μ€ν¬λ¦½νΈλ₯Ό μλμΌλ‘ μ€νν΄λ μ¬μ ν μλνμ§λ§ λ°±μ μ΄ μλ£λλ©΄ νμΈ λ° μ·¨μ (Whiptail νλ©΄)λ₯Ό ν΄λ¦ν΄μΌνλ©° κ·Έ ν λ€μ μμ μ΄ μμλ©λλ€.
λλ cronμ μν΄ μμλ μλ λ°±μ μ dietpi-backupμ μ¬μ©νλ κ²μ΄ λ¬Έμ λΌκ³ μκ°ν©λλ€. 6.9 λ²μ μμ μλνμ§λ§ dietpi-backupμ λ€μ μμ±ν ν μλνμ§ μμμ΅λλ€.
λΏ‘λΏ‘
λ€μ ν λ² νμΈνμΈμ.
/DietPi/dietpi/dietpi-backup 1
κ° μ±κ³΅μ μΌλ‘ μ€νλ©λκΉ?G_USER_INPUTS=0 /DietPi/dietpi/dietpi-backup 1
λ μ€λ₯μμ΄ μλνλ©° λ€μκ³Ό κ°μ΄ νμλ©λλ€.root@VM-Jessie:~# G_USER_INPUTS=0 /DietPi/dietpi/dietpi-backup 1
[ OK ] Root access verified.
[ OK ] DietPi-Drive_Manager | RootFS R/W access verified.
[ OK ] DietPi-Backup | Checking for pre-req APT packages: rsync
[ INFO ] DietPi-Backup | Flagged for installation: rsync
[ OK ] DietPi-Backup | APT installation for: rsync, please wait...
Selecting previously unselected package rsync.
(Reading database ... 36227 files and directories currently installed.)
Preparing to unpack .../rsync_3.1.1-3+deb8u1_amd64.deb ...
Unpacking rsync (3.1.1-3+deb8u1) ...
Processing triggers for systemd (215-17+deb8u7) ...
Setting up rsync (3.1.1-3+deb8u1) ...
Processing triggers for systemd (215-17+deb8u7) ...
[ OK ] DietPi-Backup | G_AGI: rsync
DietPi-Backup
βββββββββββββββββββββββββββββββββββββββββββββββββββββ
Mode: Backup
[ OK ] DietPi-Backup | DietPi-Userdata validation: /mnt/dietpi_userdata
[ SUB1 ] DietPi-Services > stop
[ OK ] DietPi-Services | occ maintenance:mode --on
[ OK ] DietPi-Services | stop : cron
[ OK ] DietPi-Services | stop : sonarr
[ OK ] DietPi-Services | stop : lighttpd
[ OK ] DietPi-Services | stop : php5-fpm
[ OK ] DietPi-Services | stop : mysql
[ SUB1 ] DietPi-Services > stop
[ OK ] DietPi-Services | stop : cron
[ OK ] DietPi-Services | stop : sonarr
[ OK ] DietPi-Services | stop : lighttpd
[ OK ] DietPi-Services | stop : php5-fpm
[ OK ] DietPi-Services | stop : mysql
[ INFO ] DietPi-Backup | Backing up to: /mnt/dietpi-backup
[ OK ] DietPi-Backup | Free space check: path=/mnt/dietpi-backup/data | available=5695 MB | required=1861 MB
[ OK ] DietPi-Backup | rsync -aH --delete --delete-excluded --exclude-from=/tmp/.dietpi-backup_filter_inc_exc -v --log-file=/var/log/dietpi-backup.log / /mnt/dietpi-backup/data/
[ INFO ] DietPi-Backup | Backup Completed:
Backup was saved to:
- /mnt/dietpi-backup
- Log file: /var/log/dietpi-backup.log
[ SUB1 ] DietPi-Services > start
[ OK ] DietPi-Services | start : mysql
[ OK ] DietPi-Services | start : php5-fpm
[ OK ] DietPi-Services | start : lighttpd
[ OK ] DietPi-Services | start : sonarr
[ OK ] DietPi-Services | start : cron
[ SUB2 ] DietPi-Process_tool > Apply
[ OK ] DietPi-Process_tool | Completed
[ OK ] DietPi-Services | occ maintenance:mode --off
/DietPi/dietpi/dietpi-backup 1 > /mnt/rpi/backup.log && tar zcfv /mnt/rpi/backup.tar.gz /mnt/backup/dietpi-backup/ >> /mnt/rpi/backup.log && rclone copy /mnt/rpi/backup.tar.gz dysk: -L >> /mnt/rpi/backup.log && rm -r /mnt/rpi/backup.tar.gz >> /mnt/rpi/backup.log && reboot
λͺ¨λ μ€νλκ³ /mnt/rpi/backup.log
μμ λλ¬μμ 보μ¬μ€λλ€.
run-parts --test /etc/cron.daily
μ μ€ν¬λ¦½νΈλ₯Ό λμ΄ν©λλ€ (λ§€μΌ μΈ κ²½μ°, κ·Έλ μ§ μμΌλ©΄ μ‘°μ )./usr/sbin/cron -f
+ -bash
λ #!/bin/bash
λ‘ μΈν΄ bash νκ²½μ μμνλ―λ‘ μλΌκ³ μμλ©λλ€.μμ λͺ¨λ μ¬νμ΄ μ°Έμ΄λ©΄ run-partsλ₯Ό μλμΌλ‘ μμνκ³ μμλλ‘ μ€νλλμ§ νμΈν μ μμ΅λλ€.
~/testdir/backup
run-parts ~/testdir
λλ λΉμ μ΄ λ³΄μ¬ μ£Όλ©΄μ λͺ¨λ μ§λ¬Έμ λν΄ ν
μ€νΈνμ΅λλ€. μ, μλμΌλ‘ μμν λ λͺ¨λ κ²μ΄ μλν©λλ€.
run-parts λͺ
λ ΉμΌλ‘ ν
μ€νΈνμ§λ§ μλμΌλ‘ μννλ©΄ μ¬μ ν μλν©λλ€.
run-parts --test /etc/cron.daily
μ¬μ© ν λ΄ μ€ν¬λ¦½νΈκ° λμ΄λ©λλ€.
G_USER_INPUTS = 0μ μΆκ°νκ³ μ€ν¬λ¦½νΈλ₯Ό μλμΌλ‘ μμνλ©΄ λ‘κ·Έ λ±μ λν μ 보κ°μλ νλ©΄ (whiptail)μ΄ νμλμ΄μΌν©λκΉ? λλ νμ κ·Έκ²μ보기 λλ¬Έμ.
λΏ‘λΏ‘
G_USER_INPUTS=0
λ ν© ν
μΌ λ©λ΄λ₯Ό νμνμ§ μμ΅λλ€. μ 보λ ν°λ―Έλ λ©μμ§λ‘λ§ νμλκ³ μ§λ¬Έμ "μλμ€"λ‘ μλ΅λ©λλ€ (μ¬μ κ³΅κ° νμΈμ΄ λΆμ‘±ν κ²½μ° μ·¨μ, λ‘그보기 μμ).
μ€ν¬λ¦½νΈμ κ°μ λ‘ μ μ©νλ €λ©΄ μ€ν¬λ¦½νΈλ₯Ό μ€ννκΈ° μ μ λ΄ λ³΄λ΄μΌν©λλ€.
#!/bin/bash
export G_USER_INPUTS=0
/DietPi/dietpi/dietpi-backup 1
λλ λ μ½κ² μ§μ λ겨주μΈμ : G_USER_INPUTS=0 /DietPi/dietpi/dietpi-backup 1
λ κ·Έλ₯ λΉμ μ΄ μ¬μ©νλ κ²μΌλ‘ μΈμ G_USER_INPUT=0
νμ§ μκ³ μμ S
λ‘, κ·Έκ²μ νμ G_USER_INPUTS=0
κ°μ§ S
.
κ·Έλ¬λ λ³μλ₯Ό λ΄ λ³΄λ΄μ§ μμΌλ©΄ μ€ν¬λ¦½νΈκ° μ¬μ©μ μ
λ ₯μ ν μ μλμ§ μ¬λΆλ₯Ό κ²°μ ν©λλ€. cron λ° μλ₯Ό λ€μ΄ μμ€ν
λ¨μ μ€ν λ΄μμ λͺ¨λ DietPi μ€ν¬λ¦½νΈλ G_USER_INPUTS=0
μλμΌλ‘ κ²°μ νκ³ ν λΉν΄μΌν©λλ€.
ν¬λ‘ μμ
(λλ ν
μ€νΈ μμ
)μ μμμ μΆκ°νμ¬ λ°©λ²μ΄ μλνλμ§ νμΈν μ μμ΅λλ€.
[[ -t 0 ]] && echo 'This environments allows user inputs' > /mnt/rpi/inputs.log || echo 'This environment does not allow user inputs' > /mnt/rpi/inputs.log
μ€ν¬λ¦½νΈλ₯Ό μλμΌλ‘ μ€νν λ μ¬μ©μ μ
λ ₯μ΄ νμ©λλ€κ³ (whiptail λ©λ΄κ° νμλ¨), cronμ ν΅ν΄ μμλλ©΄ νμ©λμ§ μμμΌνλ©°, whiptail λ©λ΄κ° μ€ν¬λ¦½νΈλ₯Ό μ€λ¨μν€μ§ μμμΌν©λλ€.
λ¨Όμ G_USER_INPUTS=0
ν
μ€νΈνκ³ μ€ν¬λ¦½νΈλ₯Ό μλμΌλ‘ μμνλ©΄ λ€μμ κΈ°λ‘ν©λλ€.
This environments allows user inputs
κ·Έλ μ§ μμΌλ©΄ cronμΌλ‘ μμνλ©΄ :
This environment does not allow user inputs
λ€μμΌλ‘ μ€ν¬λ¦½νΈλ₯Ό λ€μκ³Ό κ°μ΄ λ³κ²½ν©λλ€.
#!/bin/bash
export G_USER_INPUTS=0
date > /mnt/rpi/backup.log && /DietPi/dietpi/dietpi-backup 1 && (echo "Backup: DONE. " >> /mnt/rpi/backup.log && tar zcfv /mnt/rpi/backup.tar.gz /mnt/backup/dietpi-backup/ && echo "Tar backup: DONE. " >> /mnt/rpi/backup.log && rclone copy /mnt/rpi/backup.tar.gz dysk: && echo "Copy to GDrive: DONE. " >> /mnt/rpi/backup.log && rm -r /mnt/rpi/backup.tar.gz && echo "Remove tar: DONE." >> /mnt/rpi/backup.log && reboot) || echo "Backup failed!" >> /mnt/rpi/backup.log
dietpi-backup.logλ μ¬μ ν λΉμ΄ μμ§λ§ backup.log :
cronμ΄ μμλκ³ μλμΌλ‘μ΄ μ€ν¬λ¦½νΈλ₯Ό μμν λ :
pon, 9 lip 2018, 18:54:01 CEST
Backup failed!
μ€ν¬λ¦½νΈλ₯Ό μλμΌλ‘ μμνμ λ :
pon, 9 lip 2018, 18:58:40 CEST
Backup: DONE.
Tar backup: DONE.
Copy to GDrive: DONE.
Remove tar: DONE.
κ·Έκ²μ λ§€μ° μ±κ°μ μΌμ λλ€ ... λ€μμΌλ‘, λ΄ μ€ν¬λ¦½νΈλ λ€μκ³Ό κ°μ΅λλ€.
#!/bin/bash
export G_USER_INPUTS=0
/DietPi/dietpi/dietpi-backup 1
μ΄ μ€ν¬λ¦½νΈκ° cronμ μν΄ μμλλ©΄ μ¬μ ν μλνμ§ μμ΅λλ€.
λ¬Έμ λ v6.10μμ cronμ μν΄ μμλ dietpi-backupμ μ¬μ ν μμ΅λλ€. λλ κ·Έκ²μ΄ dietpi-backup μ€ν¬λ¦½νΈμμ v6.10μμ λ³κ²½ ν λ¬Έμ λΌκ³ μκ°ν©λλ€.
dietpi-backup.logκ° μ¬μ ν λΉμ΄ μμ΅λλ€.
λΏ‘λΏ‘
κ·νμ ν
μ€νΈ λ
Έλ ₯μ κ°μ¬λ립λλ€.
λλ μ°λ¦¬μ λ³νλ₯Ό κ²ͺμ κ²μ
λλ€. μ§κΈκΉμ§ λ¨μκ° μμ΅λλ€. μ μ΄λ ν
μ€νΈμ λ°λ₯΄λ©΄ μ€ν¬λ¦½νΈλ μ€μ λ‘ μ€λ¨λμ§ μμ§λ§ (whiptail / G_USER_INPUTSλ λ¬Έμ κ° μλλλ€) μ€ν¨ν©λλ€.
μ체 ν μ€νΈλ₯Ό μννμ΅λλ€.
[......] Checking for (elevated) root access
λ£¨νΈ μ¬μ©μ νμΈμ μ£Όμ μ²λ¦¬ ν ν dietpi-backup
μμ cronμ ν΅ν΄ μ€ννλ©΄ λ€μκ³Ό κ°μ κ²°κ³Όκ° λ°μν©λλ€.
[FAILED] RootFS is currently Read Only, unable to continue.
κ·Έλ¬λ:
root@VM-Jessie:~# G_CHECK_ROOTFS_RW
[ OK ] Root access verified.
[ OK ] DietPi-Drive_Manager | RootFS R/W access verified.
λΏ‘λΏ‘
tput
λ¬Έμ :
tput: No value for $TERM and no -T specified
μμ : https://github.com/Fourdee/DietPi/commit/82ac7b32d32dca9db4fdb824c7ead80174844090
λνμ΄ ν¨μΉλ λ λ€λ₯Έ λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€. cronμ΄ λ§€μΌ λλ 맀μκ° μ€ννλ "run_ntpd 1"μ μκ°μ λκΈ°ννμ§ μμ΅λλ€ (/ var / lib / systemd / clockμ νμ μ€ν¬νλ λ³κ²½λμ§ μμ).
λΏ‘ λΉ΅λ¨
Jep λΉμ λ§μ΄ λ§μμ.
μμ μ¬νμ μ μ©νκΈ° μν΄ μλ μ€ν¬λ¦½νΈ νΈμ§μ νΌνλ €λ©΄ wget https://raw.githubusercontent.com/Fourdee/DietPi/82ac7b32d32dca9db4fdb824c7ead80174844090/dietpi/func/dietpi-globals -O /DietPi/dietpi/func/dietpi-globals
κ°μ λ¬Έμ κ°μλ λͺ¨λ μ¬μ©μκ° μνν΄μΌν©λλ€.
μ°λ¦¬κ° κ³΅κ° ν μ΄μ μ€ μΌλΆλ μ΄μ κ΄λ ¨μ΄ μλ€κ³ μκ°ν©λλ€. cron.hourly λ΄μ run_ntpd
κ° μ€ν¨νλ©΄ λμ€μ dietpi-logclear
λ νΈμΆλμ§ μμ / var / logκ° μ±μμ§λλ€. https://github.com/Fourdee/DietPi/issues/ 1920 λ
cron μμ
λ΄μμ μ΄λ―Έ tput
μ¬μ©νκΈ° λλ¬Έμμ΄ λ¬Έμ κ° v6.10 +μμ μ²μ λνλ μ΄μ κ° κΆκΈν©λλ€.
λκ΅°κ°κ° λ¬Έμ λ₯Ό μΌμΌν¨ λ³νλ₯Ό μ°Ύμ μ μμΌλ―λ‘ μμΌλ‘ λ μ μ²λ¦¬νλ λ°©λ²μ μκ³ μμ΅λλ€.
tput cuu
λ° tput cols
λ λ κ²½μ° λͺ¨λ νΈμΆλλ©°, μ²λ¦¬ μ λλ©μ΄μ
μ μ§μΈ λ λ€λ₯Έ λͺ¨λ DietPi μλ¦Όμμ tput ed
κ° νΈμΆλ©λλ€.μ΄μ λν μΆκ° ν μ€νΈ :
root@VM-Stretch:/tmp# cat /etc/cron.minutely/test
#!/bin/bash
echo "$TERM" &> /tmp/cron.test
tput ed &>> /tmp/cron.test
echo 'finish' &>> /tmp/cron.test
root@VM-Stretch:/tmp# cat cron.test
dumb
tput: No value for $TERM and no -T specified
$TERM
μ΄ dumb
tput
λ λΉλ‘ μ ν¨νμ§ μλλΌλ λ³μμ λν κ°μ΄ μλ€κ³ μ£Όμ₯ν©λλ€.root@VM-Stretch:/tmp# TERM='dumb' tput cols
237
root@VM-Stretch:/tmp# export TERM='dumb' tput cols
root@VM-Stretch:/tmp# export TERM='dumb' tput cols && echo continue
continue
μλͺ»λ $ TERMμ μ€λ₯λ‘ μ΄μ΄μ§μ§ μμΌλ―λ‘ (λ¨μ§ tput μΆλ ₯μ΄ μμ) cron tput μ€λ₯λ -T
λλ½κ³Ό κ΄λ ¨μ΄μλ κ²μΌλ‘ 보μ΄λ©° [[ -t 0 ]]
κ²°κ³Όλ falseμ
λλ€. μλ§λ μ΄κ²μ μ΄μ μ λ€λ₯΄κ² νλνμ μλ μμ΅λλ€. 2018-02-15μ λ§μ§λ§ ncurses-bin
APT μ
λ°μ΄νΈ : http://ftp.de.debian.org/debian/pool/main/n/ncurses/
λΉλν ν / μλͺ»λ ν°λ―Έλμ μ΄λ―Έ λ¬Έμ κ° μμμΌλ―λ‘ μ΄μ λΉμ΄μλ $ TERM λλ ' unknown
'κ° λ°κ²¬λλ©΄ dietpi- * μ€ν¬λ¦½νΈλ₯Ό μ’
λ£ν©λλ€. https://github.com/Fourdee/DietPi/blob/ ν
μ€νΈ / dietpi / func / dietpi-globals # L30 -L35
tput
νΈμΆνλ λ°μ£Όμν΄μΌν©λλ€.v6.9μμ ν μ€νΈ :
root<strong i="6">@DietPi</strong>:/tmp# cat cron.test
dumb
tput: No value for $TERM and no -T specified
finish
APT μ λ°μ΄νΈμλ cron λ° / λλ ncursesκ° ν¬ν¨λμ΄ μμ§ μμ΅λλ€ (ν μ€νΈ λ κ΄λ ¨μλ ν¨ν€μ§μ μν΄ κ°μλ¨).
apt-get dist-upgrade
λ° μ¬λΆν
νμλ cronμ tput μ€λ₯ ν μ€νμ μ€μ§νμ§ μμ΅λλ€.root<strong i="15">@DietPi</strong>:/tmp# cat /etc/cron.minutely/test
#!/bin/bash
echo "$TERM" &> /tmp/cron.test
[[ -t 0 ]] && echo 'interactive' &>> /tmp/cron.test
tput ed &>> /tmp/cron.test
echo 'finish' &>> /tmp/cron.test
root<strong i="16">@DietPi</strong>:/tmp# cat cron.test
dumb
tput: No value for $TERM and no -T specified
finish
dietpi-update
to v6.11 master : λ§€μ° μ΄μνμ§λ§ μ¬μ ν λ¬Έμ κ° μμ΅λλ€ ...root<strong i="22">@DietPi</strong>:/tmp# cat cron.test
dumb
tput: No value for $TERM and no -T specified
finish
root<strong i="27">@DietPi</strong>:/tmp# cat /etc/cron.minutely/test
#!/bin/bash
echo "$TERM" &> /tmp/cron.test
[[ -t 0 ]] && echo 'interactive' &>> /tmp/cron.test
tput ed &>> /tmp/cron.test
/DietPi/dietpi/dietpi-backup 1 &>> /tmp/cron.test
echo 'finish' &>> /tmp/cron.test
root<strong i="28">@DietPi</strong>:/tmp# cat cron.test
dumb
tput: No value for $TERM and no -T specified
[......] Checking for (elevated) root accesstput: No value for $TERM and no -T specified
/DietPi/dietpi/func/dietpi-globals: line 266: ( 38 + 6 ) / : syntax error: operand expected (error token is "/ ")
finish
dietpi-globals
v6.9λ‘ ν
μ€νΈ :root<strong i="34">@DietPi</strong>:/tmp# cat cron.test
dumb
tput: No value for $TERM and no -T specified
Checking for (elevated) root accesstput: No value for $TERM and no -T specified
/DietPi/dietpi/func/dietpi-globals: line 308: ((: lines=(38+6)/ : syntax error: operand expected (error token is "/ ")
tput: No value for $TERM and no -T specified
[ OK ] Root access verified.
DietPi-Run_ntpd | systemctl restart systemd-timesyncdtput: No value for $TERM and no -T specified
/DietPi/dietpi/func/dietpi-globals: line 308: ((: lines=(38+6)/ : syntax error: operand expected (error token is "/ ")
[.. ] tput: No value for $TERM and no -T specified
[ OK ] DietPi-Run_ntpd | systemctl restart systemd-timesyncd
[ INFO ] DietPi-Run_ntpd | NTPD: Waiting for completion of systemd-timesyncd (1/60)
[ OK ] DietPi-Run_ntpd | NTPD: systemd-timesyncd synced
[ OK ] NTPD: time sync | Completed
finish
-μ’μ, κ·Έκ²μ μ μ λ³κ²½κ³Ό κ΄λ ¨μ΄ μμ§λ§ tput
κ° μ€ν¨νκ³ μ€ν¨νκΈ° λλ¬Έμ μ€ν¬λ¦½νΈκ° μ§κΈ μ’
λ£λκ³ v6.9μμ μ’
λ£λμ§ μμ μ΄μ λ 무μμ
λκΉ?
νμΈ λ κ΄λ ¨ λ³κ²½ : https://github.com/Fourdee/DietPi/blob/master/dietpi/func/dietpi-globals#L266
local lines=$(( (${#input_string}+6)/$(tput cols) ))
μ μ 체 μ€ν¬λ¦½νΈ μ’
λ£λ‘ μ°κ²°λμ§λ§ (μ΄μ )
local lines
(( lines=(${#input_string}+6)/$(tput cols) ))
μ€λ₯λ₯Ό νμνμ§λ§ μ€ν¬λ¦½νΈκ° κ³μ μ§νλλλ‘ νμ©νμ΅λλ€ (μ μ°Έμ‘°).
https://github.com/Fourdee/DietPi/commit/82ac7b32d32dca9db4fdb824c7ead80174844090 μμ μ΄ μλνλ©° κ°μ₯ κΉ¨λν μ루μ
μ΄κΈ°λν©λλ€. tput
λ λΉλν ν μ
Έ λ΄μμ μμ ν 건λ λ°κΈ° λλ¬Έμ
λλ€. κ·Έλ¬λ μ€λ₯λ₯Ό λ°©μ§νλ €λ©΄ λ¨Όμ λ³μλ₯Ό μ μΈ ν λ€μ μ°μ νκ²½ λ΄μμ λμ€μ κ°μ ν λΉνλ μ΄μ λ°©λ²μΌλ‘ λλλ € μΌν©λλ€. Commit done https://github.com/Fourdee/DietPi/commit/0f18aa4dc0af8ab910a0173dce8849d5b53c30b0
νΈμ λ΄μ κ°κΈ°
μ
μ°°μ μ 리νκΈ° μν΄ μ λ¬Έμ λ₯Ό μ΄μμ΅λλ€. κ±°κΈ°μ μΈκΈ λ μμ μ¬νμ μ μ©νκ³ λͺ¨λ λ¬Έμ κ° ν΄κ²°λλ©΄ λ€μλ³΄κ³ νμμμ€ :
λλ μλ‘μ΄ λ¬Έμ λ₯Ό μν΄μ΄ λ¬Έμ λ₯Ό μ’ κ²° ν κ²μ λλ€.
λ΄ v6.13μ μ±κ³΅μ μΌλ‘ ssh ν μ μμμ§λ§ 곧 μ€λ¨ λ κ²μ λλ€.
"tput cols"λͺ λ Ήμ΄ tput : unknown terminal "rxvt-256color"λ₯Ό μΆλ ₯νμ¬ dietpi-loginμ 328 νμ λΉ κ°μ΄ νμλμ΄ μ΄κΈ° λΆν μ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ±κ³΅μ μΌλ‘ μ½μ ν μμν μ€λ¨λ©λλ€.
보기 νν ν΄νΉ μΈ TERM = xterm λ΄λ³΄λ΄κΈ°λ λ‘κ·ΈμΈ μ€ν¬λ¦½νΈλ₯Ό μμ ν κ²μ²λΌ 보μμΌλ©° μ΄μ μ€μΉλ₯Ό μμν μ μμ΅λλ€.
μ΄κ²μ΄ μλͺ»λ μΉμ μ΄λΌλ©΄ μΈλ΄μ¬μ κ°μ§μμμ€. github λ¬Έμ λ₯Ό μ¬μ©νλ λ°©λ²μ λͺ¨λ₯΄κ² μ΅λλ€. λλ μ€λ₯μ λν΄ μΈλͺ¨μλ μΈν°λ· κ²μμ ν νμ΄ μ€λ λλ₯Ό λ°κ²¬νμ΅λλ€. μ΄λνλ©΄ λκ΅°κ° λ΄ κ°μ λ¬Έμ κ°μλ κ²½μ° rxvt-256color μ€λ₯μ λν λλ¨Έμ§κ° λ¨μ μ μμ΅λλ€.
μΉμ νλ!
ν
μλ νμΈμ,
λ³΄κ³ μμ μ루μ μ κ°μ¬λ립λλ€ π
μ΄λ€ SSH ν΄λΌμ΄μΈνΈλ₯Ό μ€ννκ³ μμ΅λκΉ?
@Fourdee
λλ μ΄κ²μ λν΄ λ³λμ λ¬Έμ λ₯Ό μ΄μμ΅λλ€. λ¬Έμ νμΈ : https://github.com/Fourdee/DietPi/issues/2034
ν
SSHμ λ‘κ·ΈμΈ ν ν μλν΄λ³΄μμμ€. export TERM='xterm-256color'
β¬ : μ, μ΄κ²μ κΈ°λ³Έμ μΌλ‘ μ΄λ―Έ μκ² λ κ²μ
λλ€ π.
μ΄κ²μ΄ μλνλ©΄ λ€μκ³Ό κ°μ λ΄μ©μ΄ ν¬ν¨ λ μ€ν¬λ¦½νΈλ₯Ό /etc/profile.d/
μΆκ° ν μ μμ΅λλ€.
[[ $SSH_TTY ]] && [[ $TERM =~ 256 ]] && export TERM='xterm-256color'
xterm-256color
λ‘ μ‘°μ ν©λλ€.λ€λ₯Έ λ°©λ²μ λ λ§μ ν°λ―Έλ μ μκ° ν¬ν¨ λ ν¨ν€μ§λ₯Ό μ€μΉνλ κ²μ
λλ€. G_AGI ncurses-term
@Fourdee OpenSSH_7.7p1, Arch Linuxμ OpenSSL 1.1.0h
@MichaIng μ°μ°ν λμ μ£Όμ μ κ°μ¬ν©λλ€!
λ΄κ° λμ μμ€ν κ΄λ¦¬μμ΄κ³ Tom Ryderμμ΄ κΈ°μ¬λ₯Ό λ°λΌ κ°λ©΄μ ν°λ―Έλ "μ μΈ"ꡬμ±μ΄ μλΉν μλͺ» ꡬμ±λμμμ μμμ΅λλ€.
κ²°κ΅ λλ₯Ό μν΄ λ¬Έμ λ₯Ό ν΄κ²° ν κ²μ
scpκ° μ€μΉλμ§ μμκΈ° λλ¬Έμ (dropbear μλ²μ ν¨κ» μ€μΉνλ κ²μ κ³ λ €ν μ μμ΅λκΉ?) λ΄ piμ terminfo νμΌμ scp ν μ μμ΄μ λ΄κ° μμ ν μλ²μ μ λ‘λνκ³ piμμ κ°μ Έ μμ΅λλ€.
λμ λ릴 μμμ΄μ κΈ°μκ³ , μμνκ³ , μλ§μ§μ°½μ λν΄ λ€μ ν λ² μ£μ‘ν©λλ€.
ν
Jep, /root/.bashrc
λ΄μμ $ TERMμ μ€μ νλ κ²λ μλν©λλ€. /etc/profile[.d/]μ μΆκ°νλ©΄ λͺ¨λ μ¬μ©μκ° μμ€ν
μ 체μμ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€. μ΄λ μ°λ¦¬κ° DietPiμ ν¨κ» μ¬μ©ν μ루μ
μ
λλ€.
λΉμ μ΄ λ§ν¬ ν κΈ°μ¬λ λͺ¨λ κ²κ³Ό κ°λ₯μ±μ μμ£Ό μ μ€λͺ
νλ κ½€ νλ₯ν©λλ€ π. λ°λΌμ κΈ°λ³Έμ μΌλ‘ νμν ν°λ―Έλ μ νμ μλμΌλ‘ μ€μΉνμ΅λλ€. λνμ΄ κΈ°μ¬μμλ λ€μν ν°λ―Έλ μ μλ₯Ό μ€μΉνκΈ°μν μ΅μ
μΌλ‘ ncurses-term
ν¨ν€μ§λ₯Ό μΈκΈν©λλ€. κ·Έλ¬λ DietPiλ₯Ό μ¬λ¦Όνκ² μ μ§νκΈ° μν΄ λλ¬Όκ²μ΄ ν¨ν€μ§λ₯Ό μ¬μ μ€μΉνλ κ²μ 그리 μ’μ§ μμ΅λλ€. λμ bashrc / profile μ루μ
μ μ¬μ©νλ κ²μ΄ μ’μ΅λλ€. SSH λ‘κ·ΈμΈμ μμ μ¬νμ μ μ©νκΈ° μ μ κ°λ¨ν ν°λ―Έλ μ§μμ νμΈνλ κ²λ κ°λ₯ν©λλ€.
PuTTY ν΄λΌμ΄μΈνΈ ν
μ€νΈ : PuTTY> Connection
> Data
> Terminal-type string
SCP μ€μΉ μ 보 : νμΌμ μ μ‘νκΈ°μν FTP, SFTP λλ λ€νΈμν¬ λλΌμ΄λΈ NFS, SMBμ κ°μ μ¬λ¬ λ€λ₯Έ νμΌ μ μ‘ νλ‘ν μ½μ΄ μμ΅λλ€. μ¬μ μ€μΉλνμ§ μμ§λ§ ν΄λΌμ΄μΈνΈμμ μλ²λ‘ νμΌμ κ°μ Έ μ€λ λ°©λ²μ μ¬μ©μμκ² λ§‘κΈ°μμμ€. USB μ€ν±, μΈμ₯ λλΌμ΄λΈλ λ¬Όλ‘ κ°λ₯νλ©°, λ§μΌμ κ²½μ° SSH λ¨μμ κ°λ¨ν 볡μ¬νμ¬ λΆμ¬ λ£κΈ°λ κ°λ₯ν©λλ€. κ·Έλ¬λ μ΄μ¨λ μΌλ°μ μΈ ν΄κ²°μ± μΌλ‘ μμμ μΈκΈ ν λ κ°μ§ λ°©λ² μ€ νλλ₯Ό μ¬μ©ν©λλ€.
κ°μ₯ μ μ©ν λκΈ
@Fourdee OpenSSH_7.7p1, Arch Linuxμ OpenSSL 1.1.0h
@MichaIng μ°μ°ν λμ μ£Όμ μ κ°μ¬ν©λλ€!
λ΄κ° λμ μμ€ν κ΄λ¦¬μμ΄κ³ Tom Ryderμμ΄ κΈ°μ¬λ₯Ό λ°λΌ κ°λ©΄μ ν°λ―Έλ "μ μΈ"ꡬμ±μ΄ μλΉν μλͺ» ꡬμ±λμμμ μμμ΅λλ€.
κ²°κ΅ λλ₯Ό μν΄ λ¬Έμ λ₯Ό ν΄κ²° ν κ²μ
scpκ° μ€μΉλμ§ μμκΈ° λλ¬Έμ (dropbear μλ²μ ν¨κ» μ€μΉνλ κ²μ κ³ λ €ν μ μμ΅λκΉ?) λ΄ piμ terminfo νμΌμ scp ν μ μμ΄μ λ΄κ° μμ ν μλ²μ μ λ‘λνκ³ piμμ κ°μ Έ μμ΅λλ€.
λμ λ릴 μμμ΄μ κΈ°μκ³ , μμνκ³ , μλ§μ§μ°½μ λν΄ λ€μ ν λ² μ£μ‘ν©λλ€.