기계 호스트 이름 가져 오기 systemd
.
내가 깊이 익숙하지는 않지만 systemd
들여다 보며 이 자습서 웹 사이트 뿐만 아니라 공무원 systemd
매뉴얼 페이지 , 당신이 찾고있는 것 "specifier"값입니다 :
많은 설정이 제네릭을 작성하는 데 사용될 수있는 지정자를 해결합니다.
대체되는 런타임 또는 유닛 매개 변수를 참조하는 유닛 파일
단위 파일이로드 될 때.
그리고 내가 여기에서 일할 것이라고 확신하는 특정 지정자는 %H
"호스트 이름"이며 다음과 같이 설명됩니다.
유닛의 특정 시점에 실행중인 시스템의 호스트 이름
구성이로드됩니다.
따라서 귀하의 예를 확인하십시오. systemd
스크립트, [Service]
청크가이 :
[Service]
Type=simple
User=redmine
Group=redmine
ExecStart=/usr/bin/ruby /home/redmine/redmine/bin/rails server webrick -e production -b %H -p 3000
다음과 같은 행을 주목하십시오. ip=()
과제가 사라지고 ExecStart
명령에서 다음을 사용함 %H
대신에 $ip
.
IP 주소를 얻기위한 아이디어 systemd
.
즉, systemd
를 통해 호스트 이름 만 제공합니다. %H
"지정자."당신이 나에게 묻는다면 이상하게 보입니다. 그래서 나는 깊은 경험이 없다. systemd
, 나는이 포스트의 목표를 달성하기 위해 할 수있는 일을 이해한다고 믿는다.
열쇠는 EnvironmentFile
...에 대한 systemd
읽다. 사용법을 읽어보십시오. ~ EnvironmentFile
여기이 사이트에서 .
이처럼 간단한 Bash 스크립트를 만들었다 고 가정 해 봅시다. 그것의 이름을 지어 보자. write_ip_to_file.sh
IP 주소 가져 오기 로직을 자유롭게 변경할 수 있습니다. ip=$()
귀하의 설정에 맞는 것을 선택하십시오 :
#!/bin/bash
ip=$(/sbin/ifconfig eth0 | awk '/inet addr/ {split ($2,A,":"); print A[2]}');
echo IP=$ip > ~/ip.txt;
IP 주소를 출력하면됩니다. eth0
이름이 지정된 텍스트 파일로 ip.txt
귀하의 홈 디렉토리에. 형식은 다음과 같습니다.
IP=123.456.789.0
알았어? 좋은. 이제 너의 systemd
스크립트, [Service]
이런 것 같은 덩어리. 반드시 설정해야합니다. [your username]
디렉토리의 사용자 이름과 일치시킵니다. ip.txt
저장 됨 :
[Service]
Type=simple
User=redmine
Group=redmine
EnvironmentFile=/home/[your username]/ip.txt
ExecStart=/usr/bin/ruby /home/redmine/redmine/bin/rails server webrick -e production -b $IP -p 3000
그리고 그것은 config를로드하는 것입니다. ip.txt
할당하다 $IP
의 가치 123.456.789.0
. 나는 그것이 당신이 찾고있는 것이라고 믿습니다.
여기에 핵심 요소는 write_ip_to_file.sh
부팅시 또는 심지어는 systemd
스크립트 자체.
IP 주소를 얻기위한 또 다른 아이디어 systemd
.
그러나 그 말로는, 나는 더 좋은 생각을 가지고있다. ExecStart
명령을 Bash 파일에 호출 redmine_start.sh
시스템이이를 읽고 실행할 수 있는지 확인하십시오. 내용 redmine_start.sh
다음과 같습니다. 논리를 가져 오는 IP 주소를 자유롭게 변경하십시오. ip=$()
귀하의 설정에 맞는 것을 선택하십시오 :
#!/bin/bash
ip=$(/sbin/ifconfig eth0 | awk '/inet addr/ {split ($2,A,":"); print A[2]}');
/usr/bin/ruby /home/redmine/redmine/bin/rails server webrick -e production -b $IP -p 3000
그런 다음 [Service]
이런 것 같은 덩어리. 반드시 설정해야합니다. [your username]
디렉토리의 사용자 이름과 일치시킵니다. redmine_start.sh
저장 됨 :
[Service]
Type=simple
User=redmine
Group=redmine
ExecStart=/home/[your username]/redmine_start.sh
당신이 논리를 따르는 경우, ExecStart
에 포함되어있다. redmine_start.sh
그런 다음 Bash 트릭을 사용하여 IP 주소를 가져 와서 변수에 할당 한 다음 Redmine을 시작할 수 있습니다. 그만큼 systemd
스크립트는 언제 / 어떻게 시작 할지를 관리 할 것입니다.
머신 IP 주소 받기 init.d
.
그리고의 참조 용 init.d
사용자, 나는 Ubuntu를 사용하며 Bash 또는 Windows에서 현재 작업중인 시스템 IP 주소를 가져와야 할 때 init.d
시작 스크립트 나는 다음과 같이 실행한다.
ip=$(/sbin/ifconfig eth0 | awk '/inet addr/ {split ($2,A,":"); print A[2]}')
물론 변경해야합니다. /sbin/ifconfig
위치와 일치하는 ifconfig
귀하의 시스템에, 그리고 또한 변경 eth0
IP 주소를 얻으려는 네트워크 인터페이스와 일치시킵니다.
그러나 일단 설정과 필요에 맞게 조정되면 인터페이스의 IP 주소를 성공적으로 가져 와서 변수에 할당합니다. ip
그러면 다음과 같이 액세스 할 수 있습니다. $ip
스크립트에서