executando um script de shell simples na inicialização em Yosemite


1

Em relação à stackexchange post, como executar scripts shell na inicialização no Yosemite

A oferta aqui é interessante, mas tudo o que quero fazer é definir o endereço IP de uma das interfaces Ethernet, en0 com ifconfig. Não quero lançar um daemon.

o comando para executar é apenas:

ifconfig en0  inet 192.168.1.23 netmask 255.255.255.0 

Obviamente, os drivers de interface precisam ser lançados e as interfaces disponíveis para configuração. Isso deve ser executado pela raiz, caso contrário, deve ser precedido pelo sudo, que deve ter as credenciais fornecidas.

Eu tenho a conta root ativada neste sistema e me sinto confortável e conheço a maioria dos riscos.

Mas não quero fazer isso manualmente sempre que a máquina for inicializada ou reiniciada.

Talvez alguém da Apple tenha uma referência a um patch ou informações sobre por que as operações de preferência de rede para configuração manual de interfaces não as definirão na minha.

Eu tenho comprado e usado Macs desde o final dos anos 90. Esse é um dos dois únicos em quase uma dúzia de Macs que eu já possuía e que não foram comprados recentemente de um revendedor respeitável.

O servidor Apache também não será iniciado com a opção de compartilhamento na web.

Talvez a máquina com a instalação seja muito antiga? Isto é

Note: I BOUGHT THIS MACHINE USED FOR CASH
 Model Name:    MacBook Pro
 Model Identifier:  MacBookPro5,1
 Processor Name:    Intel Core 2 Duo
 Processor Speed:   2.4 GHz
 Number of Processors:  1
 Total Number of Cores: 2
 L2 Cache:  3 MB
 Memory:    4 GB
 Bus Speed: 1.07 GHz
 Boot ROM Version:  MBP51.007E.B06
 SMC Version (system):  1.33f8
 <sn deleted for this post>
  Hardware UUID:    63410FEB-9CFF-5C8C-A692-8733BBEE36C5
 Sudden Motion Sensor:
 State: Enabled

Isso não me indica sua data atual de fabricação.

Obrigado pelo tempo e atenção

Jeff


O script que você coloca em / System / Library / StartupItems / executável e pertence à raiz?
tron_jones


Dito isto, a idade da máquina é irrelevante para o que você está tentando fazer. É o sistema operacional que determina se algo vai funcionar ou não, e a execução de scripts de shell no login não deve ser um problema no Yosemite.
tubedogg

@tron_jones: Sim, o script é executável e pertence à raiz, porque configura uma interface de rede. Eu definir o bit executável nele, eu acredito que é o que você faz,
JeffK

Por que não configurá-lo no painel Rede das Preferências do sistema, como normal?
Gordon Davisson

Respostas:


3

Você pode salvar seu script como quiser e chamá-lo de um .plistarquivo salvo /Library/LaunchAgents/para ser iniciado na inicialização.

Deixe-me explicar como fazer isso com um exemplo.

  • Crie seu script e salve-o /Users/username/setip.sh.
  • Criar um novo arquivo chamado com.username.setip.plistno /Library/LaunchAgents/. Este arquivo deve ter o seguinte formato:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.username.setip</string>

  <key>ProgramArguments</key>
  <array>
    <string>/Users/username/setip.sh</string>
  </array>

  <key>Nice</key>
  <integer>1</integer>

  <key>StartInterval</key>
  <integer>60</integer>

  <key>RunAtLoad</key>
  <true/>

  <key>StandardErrorPath</key>
  <string>/tmp/com.username.setip.err</string>

  <key>StandardOutPath</key>
  <string>/tmp/com.username.setip.out</string>
</dict>
</plist>

O arquivo é bastante auto-explicativo. Ele iniciará o comando a /Users/username/setip.shcada 60 segundos, será iniciado no carregamento, salvará erros /tmp/com.username.setip.erre fará logon /tmp/com.username.setip.out.

Reinicie e o script será executado.


Se o script for executado como raiz na inicialização, ele precisará ser colocado em / Library / LaunchDaemons. Os LaunchAgents são executados quando um usuário efetua login, como esse usuário.
Gordon Davisson

Então, de onde vem o "a cada 60 segundos"?
Mkataja 18/03/2015

Desculpe, esqueça de incluir algumas linhas. O "a cada 60 segundos" vem da linha com StartIntervale o seguinte valor é o tempo em segundos.
jherran

não funciona!
31515 sarraftw
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.