반응형
screen_백그라운드

리눅스 백그라운드 실행 (터미널종료에도)

터미널종료해도 백그라운드 실행유지. 요약.

  • 방법1 (nohup)
$ nohup [커맨드] &
  • 방법2 (disown)
$ 커맨드 &
$ disown 
  • 방법3 (screen)
$ screen -S [작업명] ; 작업명은 임의의 스트링...
$ [커맨드]
^A, d ; (컨트롤+A 누르고 d키를 누름) detach되면서 백그라운드로 돌아감. 
  • 로그아웃했다가 다시 로그인하여 프로세스 확인
ps -ef | grep [검색어] ; 프로세스가 잘 떠 있는지 확인

screen 백그라운드 실행

스크린 - 윈도우 개념.
스크린들을 여러 개 만들수 있고, 스크린 내부에 윈도우를 여러 개 만들 수 있다. (처음 스크린을 만들면 0번 윈도우가 자동으로 만들어짐)

스크린 만들기

screen -S [세션명]
ex)
screen -S edit
screen -S build

스크린 목록

screen -ls
여기에 Attached라고 되어 있는 것이 현재 screen.
전부 detached라고 나오면 스크린 상태가 아님.

스크린 나오기

^+A, d ; detach. 작업중인 것은 백그라운드로 계속 돌아간다.

스크린 재접속

screen -r [세션명]

스크린 내에서 윈도우 만들기

  • ^+A 누른 후에 C (create) 를 누름.

윈도우 종료는 exit

윈도우 목록. 몇 번 까지 있는지 하단에 나옴.
^+A, W ; window

윈도우 이동

^+A, a ; 바로 전
^+A, 0 ; 0번창
^+A, 1 ; 1번창.

screen 상태에서 화면 스크롤

스크린 상태에서는 쉬프트+PageUp (스크롤)이 먹히지 않는다. 화면이 깜빡이고 만다.
^+A, ESC ; vi모드로 이동 및 페이지 업 , 다운에 vi커맨드로 하면 된다. ^B, ^F
ESC를 누르면 스크롤 모드 해제.

nohup

nohup [커맨드] &
터미널 종료 후에도 계속 작업이 유지됨

&, bg, fg

백그라운드 실행을 하면, 쉘은 그대로 쓸 수 있는데, 백그라운드에서 터미널로 출력되는 메시지도 화면에 출력된다.

  • 백그라운드 실행
    ./a.sh &
    그러나 터미널 종료시 종료됨… (종료 방지를 하려면 screen이나 nohup을 사용)

  • 현재 실행중인 프로그램을 백그라운드로.

^+Z ; 일시 중단하고 shell로 빠져나옴.
jobs ; 백그라운드 조회. 번호와 커맨드가 나옴.
bg %1  ; %잡번호를 입력하여 백그라운드로 재개시킴.

기타

fg %1 ; 포그라운드로 재개됨.
kill %1 ; 잡1번 강제종료.

disown

그러나, 위 백그라운드는 터미널이 종료되면 프로세스도 종료된다.
이것을 방지하려면,

disown

disown을 하게 되면 현재 세션 job list에서 job 들이 빠져나가게 된다. (jobs 커맨드로 확인 가능. 프로세스 전체 보기로 보면 프로세스는 남아있음.)
따라서 터미널이 종료되어도 SIGHUP이 전달되지 않아서 계속 돌아가게 된다.

Author: crazyj7@gmail.com

'Develop > Linux_Unix' 카테고리의 다른 글

[도커] tomcat, mariadb 환경 war hang/slow  (0) 2021.04.28
Bash Tip 작업속도를 빠르게  (0) 2021.03.03
Git 사용법_요약  (0) 2019.12.16
Ubuntu18/tomcat8 setup  (0) 2019.11.08
VI 사용법  (0) 2015.06.02
반응형

synology nas에 mp3 파일을 FTP로 추가했는데, 인식이 안되는 경우가 있다.

인덱스 갱신이 바로 되지 않아서 그런 것 같다. (해당 폴더는 미디어 음악으로 인덱싱이 걸린 상태이다. 오디오스테이션에서 접근 가능한 폴더)

제이판에서 재인덱싱을 하면 되지만, 파일들이 많다면 처음부터 인덱싱을 다시 하는 것이라 엄청난 시간이 소요될 수 있다. (주의!) 재인덱싱 동안에는 해당 파일들을 audio station에서 접근이 안됨. 

=> 올린 파일만 인덱스에 추가해야 빠른 시간에 바로 인식이 될 수 있다.

ssh 쉘로 접속하여 synoindex 란 커맨드를 사용하면 된다.

synoindex -a "추가한 파일" 

위와 같이 인덱스에 추가하는 것이 가장 빠르다.

또는 아래와 같이 특정 폴더만 재인덱싱 한다. (파일수에 따라 시간이 좀 걸릴 수 있다. 그러나 파일명 지정할 필요가 없어서 편리함.)

synoindex -R "재인덱싱할 폴더"

예를 들면....

사용1) 커맨드로 파일을 추가하거나 아래처럼 스크립트를 만들어 현재 디렉터리의 mp3 파일들을 index에 추가할 수 있다. (가장 빠름)

synoindex -a "hello.mp3"

또는 아래 스트립트를 update.sh 파일로 만들어 실행.

#!/bin/sh
pwd=`pwd`
echo $pwd
for entry in *.mp3
do
  echo "$pwd/$entry"
  synoindex -a "$pwd/$entry"
done

사용2) 귀찮다면  현재 디렉터리만 재 인덱싱 하는게 편할 수도 있다. (단, 재인덱싱 시간은 약간 걸릴 수도 있다)

synoindex -R .

 

 

반응형
mariadb_10.4_setup

MariaDB 10.4 install / CentOS 7

CentOS 7.9에서 mariaDB 10.4 설치하다 디스크 공간 문제를 고려하여 경로 변경하는 중 계속된 실패로 삽질을 한 참 하였다.

  • 일단 전에 설치된 DB를 지우고 시작.
// 서비스 중지
$systemctl stop mariadb

[패키지 삭제]
$yum remove Maria*

// 전에 설치한 디폴트 경로
$rm -rf /var/lib/mysql

패키지 다운로드 및 기본 설치

yum으로 설치

// MariaDB yum repo 등록
$ vi /etc/yum.repos.d/MariaDB.repo

아래의 내용을 작성한다.

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
// MariaDB 설치
$ yum install MariaDB

// 설치된 버전 확인
$ rpm -qa | grep MariaDB
MariaDB-compat-10.4.17-1.el7.centos.x86_64
MariaDB-common-10.4.17-1.el7.centos.x86_64
MariaDB-server-10.4.17-1.el7.centos.x86_64
MariaDB-client-10.4.17-1.el7.centos.x86_64
또는
$ yum list installed Maria*
Installed Packages
MariaDB-client.x86_64                                10.4.17-1.el7.centos                                @mariadb
MariaDB-common.x86_64                                10.4.17-1.el7.centos                                @mariadb
MariaDB-compat.x86_64                                10.4.17-1.el7.centos                                @mariadb
MariaDB-server.x86_64                                10.4.17-1.el7.centos                                @mariadb

// 버전 확인
$ mariadb --version
mariadb  Ver 15.1 Distrib 10.4.17-MariaDB, for Linux (x86_64) using readline 5.1

기본적으로 /var/lib/mysql에 설치된다.

  • 서비스 실행 및 암호 설정
// mariadb 실행
$ systemctl start mariadb

// 패스워드 설정
$ /usr/bin/mysqladmin -u root password '패스워드'

// 포트 확인
$ netstat -anp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      102252/mysqld
  • DB 생성 및 초기화 / 사용자 생성
$ mysql -u root -p
> use mysql ;

[사용자 추가]
create user 'crazyj'@'%' identified by 'crazyj00.';
create user 'crazyj'@'localhost' identified by 'crazyj00.';
flush privileges ;

[DB생성]
create database CRAZYJ_DB ;
grant all privileges on CRAZYJ_DB.* to 'crazyj'@'%';
grant all privileges on CRAZYJ_DB.* to 'crazyj'@'localhost';
flush privileges ;


[사용자 패스워드 변경]
ALTER user 'crazyj'@'localhost' IDENTIFIED WITH mysql_native_password BY '새패스워드';
또는 아래와 같이 설정
ALTER user 'crazyj'@'localhost' IDENTIFIED BY '새패스워드';
ALTER user 'crazyj'@'%' IDENTIFIED BY '새패스워드';
flush privileges ;

여기서 기본 경로가 /var/lib/mysql 인데 추후 디스크 공간을 고려하면 다른 파티션으로 옮기고 싶어졌다.
여기서 문제가 시작됨…

데이터 경로 위치 변경

쉽게 생각하면… DB 서비스 중지하고,
/var/lib/mysql 폴더를 용량큰 파티션으로 이동하고
기존 경로를 링크를 걸어주면 끝.
이라고 생각하지만, 여러가지 원인으로 실패할 수 있다.

결론부터 말하면

  1. selinux (접근통제)도 off 해줘야 한다.
  2. mariadb 기본설정에서 /root 나 /home 경로로 이동을 막고 있다.
    설정을 바꾸면 해결됨.
  • selinux off
# getenforce
Enforcing
# setenforce 0
# getenforce
Permissive
#
#vi /etc/selinux/config
--------------
#SELINUX=enforcing
SELINUX=disabled
------------
  • mariadb 서비스 설정 변경
$ systemctl stop mariadb
$ vi /usr/lib/systemd/system/mariadb.service
--------------------
# Prevent accessing /home, /root and /run/user
#ProtectHome=true
ProtectHome=false
------------------------
  • DB 링크 설정하고 서비스 시작.
$ mv /var/lib/mysql /home/mysql
$ ln -s /home/mysql /var/lib/mysql

$ systemctl start mariadb

끝.

참고) 아래는 시도 과정…

아예 처음부터 새로 만들자. 디폴트 경로 변경
$ vi /etc/my.cnf.d/server.cnf
아래 섹션에 추가
------------------------
[mysqld]
datadir=/home/data/mysql
socket=/home/data/mysql/mysql.sock
-----------------

$ vi /etc/my.cnf.d/mysql-clients.cnf
아래를 추가 (client 섹션이 없어서 추가)
-----------------
[client]
socket=/home/data/mysql/mysql.sock
----------------

$ cd /bin
$ mariadb-install-db --user=mysql
위 설정파일에서 지정된 경로에서 초기화됨!!!! 
(--user 옵션을 생략하면 root 계정으로 생성됨)

위와 같이 하면 되야 되는데… 서비스 실행시 그래도 에러발생???

  • centOS7의 selinux 기본 정책으로 실패???

  • selinux 관련 설정 변경

$ yum install policycoreutils-python
  
$ ls -lZ /var/lib/mysql
$ cp -rf /var/lib/mysql /home/data/mysql
$ chown -R mysql:mysql /home/data/mysql
$ ls -lZ /home/data/mysql

$ vi my.cnf
datadir=/home/data/mysql

$ semanage fcontext -a -t mysqld_db_t "/home/data/mysql(/.*)?"

$ grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local

$ restorecon -R -v /home/data/mysql

$ ls -lZ /home/data/mysql
-----------------------------------
위와 같이 했는데도 결국 안되서 selinux 옵션을 끄기로...

# getenforce
Enforcing
# setenforce 0
# getenforce
Permissive
#
#vi /etc/selinux/config
--------------
#SELINUX=enforcing
SELINUX=disabled
------------

위와 같이 해도 selinux를 off했음에도 실패했음.

원인은… 기본적으로 centos에서 mariadb는 /home, /root 경로를 사용할 수 없다나…
아니, 이런 설정도 있었나??? 헐… 삽질만…

데이터 폴더 이동 방법 찾던 중 발견.

$ systemctl stop mysql
$ mkdir -p /home/data/mysql

$ cp -rf /var/lib/mysql /home/data/mysql
$ chown -R mysql:mysql /home/data/mysql
(나중에 정상작동 확인후, 기존data인 /var/lib/mysql은 삭제)

==================> 이 문제였음. <===================
$ vi /usr/lib/systemd/system/mariadb.service
# Prevent accessing /home, /root and /run/user
#ProtectHome=true
ProtectHome=false
==================> 이 문제였음. <===================

서비스 시작
$ systemctl start mysql

Author: crazyj7@gmail.com

+ Recent posts